libpurple/certificate.c

Wed, 22 Jul 2009 04:24:06 +0000

author
Paul Aurich <darkrain42@pidgin.im>
date
Wed, 22 Jul 2009 04:24:06 +0000
branch
cpw.darkrain42.2.6.1
changeset 27932
bd122d5593b4
parent 27925
c84c4837876c
child 28031
2432628d028a
permissions
-rw-r--r--

Better errors for certificate expiration/activation checking.

17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
1 /**
19015
2e55af5c1242 - Typo fix
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
2 * @file certificate.c Public-Key Certificate API
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
3 * @ingroup core
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
4 */
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
5
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
6 /*
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
7 *
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
8 * purple
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
9 *
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
10 * Purple is the legal property of its developers, whose names are too numerous
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
11 * to list here. Please refer to the COPYRIGHT file distributed with this
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
12 * source distribution.
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
13 *
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
14 * This program is free software; you can redistribute it and/or modify
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
15 * it under the terms of the GNU General Public License as published by
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
16 * the Free Software Foundation; either version 2 of the License, or
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
17 * (at your option) any later version.
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
18 *
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
19 * This program is distributed in the hope that it will be useful,
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
22 * GNU General Public License for more details.
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
23 *
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
24 * You should have received a copy of the GNU General Public License
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
25 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19827
diff changeset
26 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
27 */
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
28
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
29 #include <glib.h>
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
30
19668
2071903c58e4 Fix the win32 build for the cert SoC branch merge.
Daniel Atallah <datallah@pidgin.im>
parents: 19500
diff changeset
31 #include "internal.h"
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
32 #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
33 #include "dbus-maybe.h"
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
34 #include "debug.h"
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
35 #include "request.h"
18894
1a00d2309d39 - Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18818
diff changeset
36 #include "signals.h"
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
37 #include "util.h"
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
38
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
39 /** 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
40 static GList *cert_schemes = NULL;
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
41 /** List of registered Verifiers */
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
42 static GList *cert_verifiers = NULL;
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
43 /** List of registered Pools */
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
44 static GList *cert_pools = NULL;
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
45
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
46 void
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
47 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
48 const gchar *subject_name, GList *cert_chain,
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
49 PurpleCertificateVerifiedCallback cb,
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
50 gpointer cb_data)
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
51 {
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
52 PurpleCertificateVerificationRequest *vrq;
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
53 PurpleCertificateScheme *scheme;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
54
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
55 g_return_if_fail(subject_name != NULL);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
56 /* 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
57 be verified? */
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
58 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
59 g_return_if_fail(cb != NULL);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
60
18462
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
61 /* Look up the CertificateScheme */
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
62 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
63 g_return_if_fail(scheme);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
64
18463
20cf7daafb13 - purple_certificate_verify attempts to check that the cert chain is of
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18462
diff changeset
65 /* 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
66 Verifier scheme */
18479
a38ca6794f6f - Fixed an inverted assertion
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18477
diff changeset
67 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
68 ((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
69
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
70 /* 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
71 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
72 vrq->verifier = verifier;
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
73 vrq->scheme = scheme;
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
74 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
75 vrq->cert_chain = purple_certificate_copy_list(cert_chain);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
76 vrq->cb = cb;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
77 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
78
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
79 /* Initiate verification */
2c6d71addbdb - purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18461
diff changeset
80 (verifier->start_verification)(vrq);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
81 }
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
82
18466
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
83 void
19028
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
84 purple_certificate_verify_complete(PurpleCertificateVerificationRequest *vrq,
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
85 PurpleCertificateVerificationStatus st)
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
86 {
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
87 PurpleCertificateVerifier *vr;
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
88
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
89 g_return_if_fail(vrq);
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
90
20832
3298116f3281 - Debugging babble in purple_verify_complete to tell final verification
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20831
diff changeset
91 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
92 purple_debug_info("certificate",
3298116f3281 - Debugging babble in purple_verify_complete to tell final verification
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20831
diff changeset
93 "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
94 vrq->subject_name);
3298116f3281 - Debugging babble in purple_verify_complete to tell final verification
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20831
diff changeset
95 } 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
96 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
97 "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
98 vrq->subject_name);
3298116f3281 - Debugging babble in purple_verify_complete to tell final verification
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20831
diff changeset
99 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
100
19028
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
101 /* 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
102 (vrq->cb)(st, vrq->cb_data);
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
103
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
104 /* And now to eliminate the request */
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
105 /* Fetch the Verifier responsible... */
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
106 vr = vrq->verifier;
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
107 /* ...and order it to KILL */
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
108 (vr->destroy_request)(vrq);
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
109
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
110 /* 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
111 created elements */
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
112 g_free(vrq->subject_name);
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
113 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
114
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
115 /* A structure born
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
116 * to much ado
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
117 * and with so much within.
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
118 * It reaches now
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
119 * its quiet end. */
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
120 g_free(vrq);
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
121 }
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
122
1c28409e9c5f - Add verify_complete, which should deprecate verify_destroy
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19026
diff changeset
123
18653
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
124 PurpleCertificate *
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
125 purple_certificate_copy(PurpleCertificate *crt)
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
126 {
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
127 g_return_val_if_fail(crt, NULL);
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
128 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
129 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
130
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
131 return (crt->scheme->copy_certificate)(crt);
ac29c2efe90e - Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18649
diff changeset
132 }
18467
6bd91f3acf84 - Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18466
diff changeset
133
18655
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
134 GList *
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
135 purple_certificate_copy_list(GList *crt_list)
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
136 {
24488
9b4d7aa767a2 Fix a printf("%s", NULL). Fixes #7289.
Daniel Atallah <datallah@pidgin.im>
parents: 24182
diff changeset
137 GList *new_l, *l;
18655
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
138
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
139 /* 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
140 new_l = g_list_copy(crt_list);
18655
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
141
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
142 /* 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
143 for (l = new_l; l; l = l->next) {
18655
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
144 l->data = purple_certificate_copy(l->data);
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
145 }
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
146
24488
9b4d7aa767a2 Fix a printf("%s", NULL). Fixes #7289.
Daniel Atallah <datallah@pidgin.im>
parents: 24182
diff changeset
147 return new_l;
18655
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
148 }
43b99fe59f54 - Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18653
diff changeset
149
18467
6bd91f3acf84 - Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18466
diff changeset
150 void
18466
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
151 purple_certificate_destroy (PurpleCertificate *crt)
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
152 {
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
153 PurpleCertificateScheme *scheme;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
154
18466
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
155 if (NULL == crt) return;
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
156
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
157 scheme = crt->scheme;
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
158
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
159 (scheme->destroy_certificate)(crt);
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
160 }
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
161
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
162 void
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
163 purple_certificate_destroy_list (GList * crt_list)
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
164 {
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
165 PurpleCertificate *crt;
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
166 GList *l;
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
167
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
168 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
169 crt = (PurpleCertificate *) l->data;
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
170 purple_certificate_destroy(crt);
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
171 }
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
172
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
173 g_list_free(crt_list);
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
174 }
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
175
19016
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
176 gboolean
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
177 purple_certificate_signed_by(PurpleCertificate *crt, PurpleCertificate *issuer)
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
178 {
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
179 PurpleCertificateScheme *scheme;
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
180
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
181 g_return_val_if_fail(crt, FALSE);
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
182 g_return_val_if_fail(issuer, FALSE);
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
183
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
184 scheme = crt->scheme;
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
185 g_return_val_if_fail(scheme, FALSE);
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
186 /* 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
187 g_return_val_if_fail(issuer->scheme == scheme, FALSE);
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
188
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
189 return (scheme->signed_by)(crt, issuer);
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
190 }
3cf632c31eb3 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19015
diff changeset
191
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
192 gboolean
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
193 purple_certificate_check_signature_chain(GList *chain)
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
194 {
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
195 GList *cur;
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
196 PurpleCertificate *crt, *issuer;
19021
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
197 gchar *uid;
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
198 time_t now, activation, expiration;
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
199 gboolean ret;
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
200
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
201 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
202
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
203 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
204 purple_debug_info("certificate",
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
205 "Checking signature chain for uid=%s\n",
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
206 uid);
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
207 g_free(uid);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
208
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
209 /* 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
210 if (chain->next == NULL) {
19021
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
211 purple_debug_info("certificate",
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
212 "...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
213 return TRUE;
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
214 }
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
215
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
216 now = time(NULL);
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
217
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
218 /* Load crt with the first certificate */
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
219 crt = (PurpleCertificate *)(chain->data);
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
220 /* 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
221 for ( cur = chain->next; cur; cur = cur->next ) {
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
222
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
223 issuer = (PurpleCertificate *)(cur->data);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
224
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
225 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
226
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
227 ret = purple_certificate_get_times(issuer, &activation, &expiration);
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
228 if (!ret || now < activation || now > expiration) {
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
229 if (!ret)
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
230 purple_debug_error("certificate",
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
231 "...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
232 "Chain is INVALID\n", uid);
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
233 else if (now > expiration)
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
234 purple_debug_error("certificate",
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
235 "...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
236 uid, ctime(&expiration));
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
237 else
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
238 purple_debug_error("certificate",
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
239 "...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
240 "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
241
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
242 g_free(uid);
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
243 return FALSE;
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
244 }
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
245
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
246 /* Check the signature for this link */
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
247 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
248 purple_debug_error("certificate",
19021
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
249 "...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
250 uid);
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
251 g_free(uid);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
252
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
253 return FALSE;
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
254 }
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
255
19021
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
256 purple_debug_info("certificate",
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
257 "...Good signature by %s\n",
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
258 uid);
a51771bf3d26 - Add debugging babble to check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19020
diff changeset
259 g_free(uid);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
260
19017
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
261 /* 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
262 checked */
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
263 crt = issuer;
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
264 }
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 /* 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
267 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
268 return TRUE;
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
269 }
d89f7930272f - Add purple_certificate_check_signature_chain
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19016
diff changeset
270
18577
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
271 PurpleCertificate *
18578
95080ca9610a - Fixed naming issues in previous revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18577
diff changeset
272 purple_certificate_import(PurpleCertificateScheme *scheme, const gchar *filename)
18577
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
273 {
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
274 g_return_val_if_fail(scheme, NULL);
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
275 g_return_val_if_fail(scheme->import_certificate, NULL);
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
276 g_return_val_if_fail(filename, NULL);
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
277
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
278 return (scheme->import_certificate)(filename);
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
279 }
7b4c95fb042d - Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18576
diff changeset
280
18496
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
281 gboolean
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
282 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
283 {
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
284 PurpleCertificateScheme *scheme;
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
285
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
286 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
287 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
288 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
289
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
290 scheme = crt->scheme;
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
291 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
292
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
293 return (scheme->export_certificate)(filename, crt);
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
294 }
3bb8e716482e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18495
diff changeset
295
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
296 GByteArray *
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
297 purple_certificate_get_fingerprint_sha1(PurpleCertificate *crt)
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
298 {
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
299 PurpleCertificateScheme *scheme;
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
300 GByteArray *fpr;
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
301
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
302 g_return_val_if_fail(crt, NULL);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
303 g_return_val_if_fail(crt->scheme, NULL);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
304
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
305 scheme = crt->scheme;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
306
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
307 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
308
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
309 fpr = (scheme->get_fingerprint_sha1)(crt);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
310
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
311 return fpr;
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
312 }
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
313
18481
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
314 gchar *
19020
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
315 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
316 {
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
317 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
318 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
319 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
320
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
321 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
322 }
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
323
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
324 gchar *
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
325 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
326 {
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
327 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
328 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
329 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
330
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
331 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
332 }
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
333
a9af8402bb04 - Expose get_unique_id and get_issuer_unique_id through libpurple functions
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
334 gchar *
18481
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
335 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
336 {
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
337 PurpleCertificateScheme *scheme;
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
338 gchar *subject_name;
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
339
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
340 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
341 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
342
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
343 scheme = crt->scheme;
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
344
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
345 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
346
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
347 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
348
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
349 return subject_name;
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
350 }
d220d85caaf1 - Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18479
diff changeset
351
18643
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
352 gboolean
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
353 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
354 {
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
355 PurpleCertificateScheme *scheme;
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
356
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
357 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
358 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
359 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
360
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
361 scheme = crt->scheme;
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
362
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
363 /* TODO: Instead of failing, maybe use get_subject_name and strcmp? */
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
364 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
365
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
366 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
367 }
a6a86ac3c219 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18590
diff changeset
368
18647
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
369 gboolean
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
370 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
371 {
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
372 PurpleCertificateScheme *scheme;
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
373
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
374 g_return_val_if_fail(crt, FALSE);
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
375
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
376 scheme = crt->scheme;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
377
18647
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
378 g_return_val_if_fail(scheme, FALSE);
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
379
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
380 /* 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
381 this? */
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
382 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
383
19007
f3c3ddf37812 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19003
diff changeset
384 /* 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
385 return (scheme->get_times)(crt, activation, expiration);
18647
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
386 }
45240511f4eb - Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18645
diff changeset
387
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
388 gchar *
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
389 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
390 {
18645
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
391 gchar *path;
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
392 gchar *esc_scheme_name, *esc_name, *esc_id;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
393
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
394 g_return_val_if_fail(pool, NULL);
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
395 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
396 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
397
18645
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
398 /* Escape all the elements for filesystem-friendliness */
18817
d4d89568fab6 - Handle NULLs given to certificate_pool_mkpath without causing errors
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18662
diff changeset
399 esc_scheme_name = pool ? g_strdup(purple_escape_filename(pool->scheme_name)) : NULL;
d4d89568fab6 - Handle NULLs given to certificate_pool_mkpath without causing errors
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18662
diff changeset
400 esc_name = pool ? g_strdup(purple_escape_filename(pool->name)) : NULL;
d4d89568fab6 - Handle NULLs given to certificate_pool_mkpath without causing errors
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18662
diff changeset
401 esc_id = id ? g_strdup(purple_escape_filename(id)) : NULL;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
402
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
403 path = g_build_filename(purple_user_dir(),
18575
24299c91b963 - Correct the certstore folder paths
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18574
diff changeset
404 "certificates", /* TODO: constantize this? */
18645
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
405 esc_scheme_name,
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
406 esc_name,
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
407 esc_id,
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
408 NULL);
18644
ac67b1ff08c4 - pool_mkpath now runs purple_escape_filename on its return value
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18643
diff changeset
409
18645
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
410 g_free(esc_scheme_name);
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
411 g_free(esc_name);
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
412 g_free(esc_id);
805a3f4b259d - Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18644
diff changeset
413 return path;
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
414 }
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
415
18584
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
416 gboolean
18818
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
417 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
418 {
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
419 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
420 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
421
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
422 /* 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
423 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
424 return FALSE;
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
425 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
426
18818
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
427 return TRUE;
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
428 }
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
429
19000
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
430 PurpleCertificateScheme *
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
431 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
432 {
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
433 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
434 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
435
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
436 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
437 }
ec4a9c38e415 - Add purple_certificate_pool_get_scheme helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18900
diff changeset
438
18818
6460aa4cfa41 - Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18817
diff changeset
439 gboolean
18584
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
440 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
441 {
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
442 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
443 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
444 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
445
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
446 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
447 }
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
448
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
449 PurpleCertificate *
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
450 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
451 {
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
452 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
453 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
454 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
455
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
456 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
457 }
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
458
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
459 gboolean
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
460 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
461 {
18896
70742468a820 - Emit certificate-stored signal in purple_certificate_pool_store
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18894
diff changeset
462 gboolean ret = FALSE;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
463
18584
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
464 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
465 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
466 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
467
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
468 /* 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
469 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
470 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
471 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
472 FALSE);
18584
d4410000050f - Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18582
diff changeset
473
18896
70742468a820 - Emit certificate-stored signal in purple_certificate_pool_store
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18894
diff changeset
474 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
475
18900
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
476 /* 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
477 if (ret) {
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
478 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
479 pool, id);
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
480 }
18896
70742468a820 - Emit certificate-stored signal in purple_certificate_pool_store
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18894
diff changeset
481
70742468a820 - Emit certificate-stored signal in purple_certificate_pool_store
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18894
diff changeset
482 return ret;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
483 }
18573
c7fd4fbb4339 - Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18571
diff changeset
484
18899
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
485 gboolean
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
486 purple_certificate_pool_delete(PurpleCertificatePool *pool, const gchar *id)
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
487 {
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
488 gboolean ret = FALSE;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
489
18899
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
490 g_return_val_if_fail(pool, FALSE);
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
491 g_return_val_if_fail(id, FALSE);
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
492 g_return_val_if_fail(pool->delete_cert, FALSE);
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
493
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
494 ret = (pool->delete_cert)(id);
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
495
18900
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
496 /* 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
497 if (ret) {
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
498 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
499 pool, id);
8107b08ec7ae - Only emit certificate-stored and certificate-deleted if the operation
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18899
diff changeset
500 }
18899
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
501
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
502 return ret;
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
503 }
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
504
18661
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
505 GList *
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
506 purple_certificate_pool_get_idlist(PurpleCertificatePool *pool)
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
507 {
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
508 g_return_val_if_fail(pool, NULL);
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
509 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
510
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
511 return (pool->get_idlist)();
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
512 }
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
513
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
514 void
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
515 purple_certificate_pool_destroy_idlist(GList *idlist)
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
516 {
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
517 GList *l;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
518
18661
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
519 /* Iterate through and free them strings */
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
520 for ( l = idlist; l; l = l->next ) {
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
521 g_free(l->data);
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
522 }
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
523
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
524 g_list_free(idlist);
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
525 }
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
526
a3c1e2719e45 - Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18659
diff changeset
527
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
528 /****************************************************************************/
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
529 /* Builtin Verifiers, Pools, etc. */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
530 /****************************************************************************/
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
531
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
532 static void
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
533 x509_singleuse_verify_cb (PurpleCertificateVerificationRequest *vrq, gint id)
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
534 {
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
535 g_return_if_fail(vrq);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
536
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
537 purple_debug_info("certificate/x509_singleuse",
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
538 "VRQ on cert from %s gave %d\n",
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
539 vrq->subject_name, id);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
540
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
541 /* Signal what happened back to the caller */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
542 if (1 == id) {
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
543 /* Accepted! */
19031
1ba9955f993a - Remove all usage of purple_certificate_verify_destroy, as it is
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19030
diff changeset
544 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
545 PURPLE_CERTIFICATE_VALID);
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
546 } else {
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
547 /* Not accepted */
19031
1ba9955f993a - Remove all usage of purple_certificate_verify_destroy, as it is
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19030
diff changeset
548 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
549 PURPLE_CERTIFICATE_INVALID);
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
550
19031
1ba9955f993a - Remove all usage of purple_certificate_verify_destroy, as it is
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19030
diff changeset
551 }
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
552 }
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
553
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
554 static void
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
555 x509_singleuse_start_verify (PurpleCertificateVerificationRequest *vrq)
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
556 {
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
557 gchar *sha_asc;
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
558 GByteArray *sha_bin;
18483
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
559 gchar *cn;
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
560 const gchar *cn_match;
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
561 gchar *primary, *secondary;
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
562 PurpleCertificate *crt = (PurpleCertificate *) vrq->cert_chain->data;
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
563
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
564 /* Pull out the SHA1 checksum */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
565 sha_bin = purple_certificate_get_fingerprint_sha1(crt);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
566 /* Now decode it for display */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
567 sha_asc = purple_base16_encode_chunked(sha_bin->data,
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
568 sha_bin->len);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
569
18483
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
570 /* Get the cert Common Name */
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
571 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
572
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
573 /* Determine whether the name matches */
19499
6b9c37c4ca85 - Even more TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19498
diff changeset
574 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
575 cn_match = "";
18483
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
576 } else {
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
577 cn_match = _("(DOES NOT MATCH)");
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
578 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
579
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
580 /* Make messages */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
581 primary = g_strdup_printf(_("%s has presented the following certificate for just-this-once use:"), vrq->subject_name);
18483
113bfeceaf1b - x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18481
diff changeset
582 secondary = g_strdup_printf(_("Common name: %s %s\nFingerprint (SHA1): %s"), cn, cn_match, sha_asc);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
583
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
584 /* Make a semi-pretty display */
21175
c6d76b49c206 disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents: 21174
diff changeset
585 purple_request_accept_cancel(
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
586 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
587 _("Single-use Certificate Verification"),
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
588 primary,
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
589 secondary,
22269
3fdf7b13f20a A few more of those "default_action" fixes
Mark Doliner <markdoliner@pidgin.im>
parents: 22268
diff changeset
590 0, /* Accept by default */
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
591 NULL, /* No account */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
592 NULL, /* No other user */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
593 NULL, /* No associated conversation */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
594 vrq,
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
595 x509_singleuse_verify_cb,
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
596 x509_singleuse_verify_cb );
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
597
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
598 /* Cleanup */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
599 g_free(primary);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
600 g_free(secondary);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
601 g_free(sha_asc);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
602 g_byte_array_free(sha_bin, TRUE);
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
603 }
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
604
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
605 static void
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
606 x509_singleuse_destroy_request (PurpleCertificateVerificationRequest *vrq)
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
607 {
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
608 /* I don't do anything! */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
609 }
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
610
22734
4d1dde18dada Make x509_singleuse static
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22622
diff changeset
611 static PurpleCertificateVerifier x509_singleuse = {
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
612 "x509", /* Scheme name */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
613 "singleuse", /* Verifier name */
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
614 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
615 x509_singleuse_destroy_request, /* Request cleanup operation */
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
616
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
617 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
618 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
619 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
620 NULL
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
621 };
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
622
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
623
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
624
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
625 /***** X.509 Certificate Authority pool, keyed by Distinguished Name *****/
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
626 /* 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
627 possible; however, future optimizations should not be difficult. */
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
628
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
629 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
630
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
631 /** Holds a key-value pair for quickish certificate lookup */
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
632 typedef struct {
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
633 gchar *dn;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
634 PurpleCertificate *crt;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
635 } x509_ca_element;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
636
19348
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
637 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
638 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
639 {
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
640 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
641
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
642 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
643 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
644 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
645 }
507a3bf4c4d4 - Add a helper function to destroy x509_ca_elements, and use it where
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19347
diff changeset
646
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
647 /** System directory to probe for CA certificates */
19484
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
648 /* 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
649 static GList *x509_ca_paths = NULL;
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
650
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
651 /** 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
652 happens. Contains pointers to x509_ca_elements */
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
653 static GList *x509_ca_certs = NULL;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
654
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
655 /** Used for lazy initialization purposes. */
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
656 static gboolean x509_ca_initialized = FALSE;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
657
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
658 /** Adds a certificate to the in-memory cache, doing nothing else */
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
659 static gboolean
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
660 x509_ca_quiet_put_cert(PurpleCertificate *crt)
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
661 {
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
662 x509_ca_element *el;
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
663
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
664 /* 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
665 Bad Thing */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
666
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
667 g_return_val_if_fail(crt, FALSE);
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
668 g_return_val_if_fail(crt->scheme, FALSE);
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
669 /* 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
670 /* TODO: Perhaps just check crt->scheme->name instead? */
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
671 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
672
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
673 el = g_new0(x509_ca_element, 1);
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
674 el->dn = purple_certificate_get_unique_id(crt);
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
675 el->crt = purple_certificate_copy(crt);
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
676 x509_ca_certs = g_list_prepend(x509_ca_certs, el);
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
677
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
678 return TRUE;
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
679 }
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
680
19484
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
681 /* Since the libpurple CertificatePools get registered before plugins are
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
682 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
683 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
684
237d66fea269 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19352
diff changeset
685 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
686 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
687 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
688 until someone tries to use functions from the pool. */
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
689 static gboolean
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
690 x509_ca_lazy_init(void)
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
691 {
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
692 PurpleCertificateScheme *x509;
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
693 GDir *certdir;
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
694 const gchar *entry;
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
695 GPatternSpec *pempat;
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
696 GList *iter = NULL;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
697
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
698 if (x509_ca_initialized) return TRUE;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
699
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
700 /* Check that X.509 is registered */
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
701 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
702 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
703 purple_debug_warning("certificate/x509/ca",
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
704 "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
705 "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
706 "better later.\n");
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
707 return FALSE;
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
708 }
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
709
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
710 /* Use a glob to only read .pem files */
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
711 pempat = g_pattern_spec_new("*.pem");
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
712
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
713 /* 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
714 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
715 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
716 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
717 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
718 continue;
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
719 }
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
720
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
721 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
722 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
723 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
724
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
725 if ( !g_pattern_match_string(pempat, entry) ) {
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
726 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
727 }
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
728
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
729 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
730
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
731 /* TODO: Respond to a failure in the following? */
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
732 crt = purple_certificate_import(x509, fullpath);
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
733
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
734 if (x509_ca_quiet_put_cert(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
735 purple_debug_info("certificate/x509/ca",
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
736 "Loaded %s\n",
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
737 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
738 } else {
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
739 purple_debug_error("certificate/x509/ca",
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
740 "Failed to load %s\n",
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
741 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
742 }
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
743
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
744 purple_certificate_destroy(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
745 g_free(fullpath);
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
746 }
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
747 g_dir_close(certdir);
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
748 }
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
749
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
750 g_pattern_spec_free(pempat);
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
751
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
752 purple_debug_info("certificate/x509/ca",
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
753 "Lazy init completed.\n");
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
754 x509_ca_initialized = TRUE;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
755 return TRUE;
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
756 }
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
757
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
758 static gboolean
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
759 x509_ca_init(void)
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
760 {
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
761 /* 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
762 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
763 #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
764 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
765 "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
766 #else
23473
df05ffc37ed0 Add a configure option, --with-ssl-certificates to allow packagers to
Richard Laager <rlaager@pidgin.im>
parents: 23178
diff changeset
767 # 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
768 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
769 # else
df05ffc37ed0 Add a configure option, --with-ssl-certificates to allow packagers to
Richard Laager <rlaager@pidgin.im>
parents: 23178
diff changeset
770 # endif
25165
36febee8749c uncondtionally install some certificates and use them, References #6680.
Ka-Hing Cheung <khc@pidgin.im>
parents: 24488
diff changeset
771 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
772 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
773 #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
774 }
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
775
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
776 /* 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
777 it will get done later */
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
778 if ( ! x509_ca_lazy_init()) {
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
779 purple_debug_info("certificate/x509/ca",
19035
523335f1d52b - x509_ca_lazy_init is more implemented
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19034
diff changeset
780 "Init failed, probably because a "
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
781 "dependency is not yet registered. "
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
782 "It has been deferred to later.\n");
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
783 }
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
784
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
785 return TRUE;
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
786 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
787
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
788 static void
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
789 x509_ca_uninit(void)
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
790 {
19343
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
791 GList *l;
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
792
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
793 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
794 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
795 x509_ca_element_free(el);
19343
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
796 }
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
797 g_list_free(x509_ca_certs);
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
798 x509_ca_certs = NULL;
08189e9c5de8 - Write the uninit function for x509_ca
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19342
diff changeset
799 x509_ca_initialized = FALSE;
22001
80abe994a8f3 Patch from Florian Quèze (the InstantBird dude) to add a search path for
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 21646
diff changeset
800 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
801 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
802 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
803 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
804
19344
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
805 /** 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
806 static x509_ca_element *
19346
e0ae1b11effb Cosmetics
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19345
diff changeset
807 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
808 {
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
809 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
810
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
811 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
812 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
813 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
814 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
815 }
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
816 }
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
817 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
818 }
66e33c6fe7c3 - Add a function to search the x509_ca internal structures for an id
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19343
diff changeset
819
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
820 static gboolean
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
821 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
822 {
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
823 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
824 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
825
19346
e0ae1b11effb Cosmetics
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19345
diff changeset
826 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
827 return TRUE;
939e2898106f - Implement x509_ca cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19344
diff changeset
828 } else {
939e2898106f - Implement x509_ca cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19344
diff changeset
829 return FALSE;
939e2898106f - Implement x509_ca cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19344
diff changeset
830 }
939e2898106f - Implement x509_ca cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19344
diff changeset
831
939e2898106f - Implement x509_ca cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19344
diff changeset
832 return FALSE;
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
833 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
834
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
835 static PurpleCertificate *
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
836 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
837 {
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
838 PurpleCertificate *crt = NULL;
19347
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
839 x509_ca_element *el;
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
840
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
841 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
842 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
843
19347
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
844 /* Search the memory-cached pool */
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
845 el = x509_ca_locate_cert(x509_ca_certs, id);
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
846
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
847 if (el != NULL) {
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
848 /* 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
849 to play with */
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
850 crt = purple_certificate_copy(el->crt);
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
851 } else {
ec35ba7ac30a - Implement x509_ca_get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19346
diff changeset
852 crt = NULL;
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
853 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
854
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
855 return crt;
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
856 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
857
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
858 static gboolean
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
859 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
860 {
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
861 gboolean ret = FALSE;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
862
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
863 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
864
19036
62025e265d24 - Add a hacked-up method of adding certs to the CA pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19035
diff changeset
865 /* 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
866 ought to be flushed to disk somehow. */
19342
9a4aa6fc93d4 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19036
diff changeset
867 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
868
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
869 return ret;
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
870 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
871
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
872 static gboolean
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
873 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
874 {
19349
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
875 x509_ca_element *el;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
876
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
877 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
878 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
879
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
880 /* Is the id even in the pool? */
19349
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
881 el = x509_ca_locate_cert(x509_ca_certs, id);
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
882 if ( el == NULL ) {
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
883 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
884 "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
885 id);
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
886 return FALSE;
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
887 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
888
19349
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
889 /* Unlink it from the memory cache and destroy it */
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
890 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
891 x509_ca_element_free(el);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
892
19349
747af1d98998 - Implement x509_ca_delete_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19348
diff changeset
893 return TRUE;
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
894 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
895
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
896 static GList *
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
897 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
898 {
19350
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
899 GList *l, *idlist;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
900
19034
656cf1384216 In x509_ca pool:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19033
diff changeset
901 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
902
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
903 idlist = NULL;
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
904 for (l = x509_ca_certs; l; l = l->next) {
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
905 x509_ca_element *el = l->data;
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
906 idlist = g_list_prepend(idlist, g_strdup(el->dn));
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
907 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
908
19350
847740e5ca57 - Implement x509_ca_get_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19349
diff changeset
909 return idlist;
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
910 }
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
911
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
912
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
913 static PurpleCertificatePool x509_ca = {
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
914 "x509", /* Scheme name */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
915 "ca", /* Pool name */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
916 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
917 NULL, /* Internal data */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
918 x509_ca_init, /* init */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
919 x509_ca_uninit, /* uninit */
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
920 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
921 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
922 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
923 x509_ca_delete_cert, /* Cert remover */
19827
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
924 x509_ca_get_idlist, /* idlist retriever */
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
925
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
926 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
927 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
928 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
929 NULL
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
930
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
931 };
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
932
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
933
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
934
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
935 /***** 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
936 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
937
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
938 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
939 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
940 {
18574
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
941 gchar *poolpath;
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
942 int ret;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
943
18574
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
944 /* 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
945 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
946 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
947
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
948 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
949 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
950 "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
951 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
952
18574
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
953 g_free(poolpath);
ee5a638ce111 - Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18573
diff changeset
954
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
955 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
956 }
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
957
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
958 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
959 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
960 {
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
961 gchar *keypath;
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
962 gboolean ret = FALSE;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
963
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
964 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
965
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
966 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
967
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
968 ret = g_file_test(keypath, G_FILE_TEST_IS_REGULAR);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
969
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
970 g_free(keypath);
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
971 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
972 }
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
973
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
974 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
975 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
976 {
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
977 PurpleCertificateScheme *x509;
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
978 PurpleCertificate *crt;
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
979 gchar *keypath;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
980
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
981 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
982
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
983 /* Is it in the pool? */
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
984 if ( !x509_tls_peers_cert_in_pool(id) ) {
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
985 return NULL;
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
986 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
987
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
988 /* Look up the X.509 scheme */
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
989 x509 = purple_certificate_find_scheme("x509");
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
990 g_return_val_if_fail(x509, NULL);
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
991
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
992 /* Okay, now find and load that key */
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
993 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
994 crt = purple_certificate_import(x509, keypath);
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
995
18579
a479d0f12779 - Finish tls_peers get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18578
diff changeset
996 g_free(keypath);
18576
d7d4ea071a48 - Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18575
diff changeset
997
18579
a479d0f12779 - Finish tls_peers get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18578
diff changeset
998 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
999 }
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
1000
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
1001 static gboolean
18571
abab131c242c - CertificatePool put_cert now accepts an id argument
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18496
diff changeset
1002 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
1003 {
18580
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1004 gboolean ret = FALSE;
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1005 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
1006
18580
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1007 g_return_val_if_fail(crt, FALSE);
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1008 g_return_val_if_fail(crt->scheme, FALSE);
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1009 /* Make sure that this is some kind of X.509 certificate */
18581
26b562cc939d - Comment change
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18580
diff changeset
1010 /* TODO: Perhaps just check crt->scheme->name instead? */
18580
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1011 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
1012
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1013 /* Work out the filename and export */
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1014 keypath = purple_certificate_pool_mkpath(&x509_tls_peers, id);
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1015 ret = purple_certificate_export(keypath, crt);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1016
18580
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1017 g_free(keypath);
9cd83ce5366d - Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18579
diff changeset
1018 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
1019 }
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
1020
18897
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1021 static gboolean
18898
eb09543c2898 - remove_cert => delete_cert, because naming conventions are our
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18897
diff changeset
1022 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
1023 {
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1024 gboolean ret = FALSE;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1025 gchar *keypath;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1026
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1027 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
1028
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1029 /* 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
1030 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
1031 purple_debug_warning("certificate/tls_peers",
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1032 "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
1033 id);
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1034 return FALSE;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1035 }
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1036
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1037 /* OK, so work out the keypath and delete the thing */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1038 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
1039 if ( unlink(keypath) != 0 ) {
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1040 purple_debug_error("certificate/tls_peers",
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1041 "Unlink of %s failed!\n",
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1042 keypath);
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1043 ret = FALSE;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1044 } else {
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1045 ret = TRUE;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1046 }
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1047
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1048 g_free(keypath);
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1049 return ret;
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1050 }
1f94d1ea37c3 - Write remove_cert function for tls_peers Pool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18896
diff changeset
1051
18662
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1052 static GList *
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1053 x509_tls_peers_get_idlist(void)
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1054 {
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1055 GList *idlist = NULL;
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1056 GDir *dir;
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1057 const gchar *entry;
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1058 gchar *poolpath;
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1059
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1060 /* 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
1061 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
1062 dir = g_dir_open(poolpath,
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1063 0, /* No flags */
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1064 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
1065 g_free(poolpath);
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1066
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1067 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
1068
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1069 /* 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
1070 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
1071 /* Unescape the filename */
2ebe15f875a6 - tls_peers pool unescapes filenames in its directory, as it should
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19017
diff changeset
1072 const char *unescaped = purple_unescape_filename(entry);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1073
18662
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1074 /* 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
1075 string) */
19018
2ebe15f875a6 - tls_peers pool unescapes filenames in its directory, as it should
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19017
diff changeset
1076 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
1077 }
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1078
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1079 /* Release the directory */
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1080 g_dir_close(dir);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1081
18662
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1082 return idlist;
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1083 }
8d763d3e7784 - Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18661
diff changeset
1084
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
1085 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
1086 "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
1087 "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
1088 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
1089 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
1090 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
1091 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
1092 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
1093 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
1094 x509_tls_peers_put_cert, /* Cert writer */
18899
45bdab2558f8 - Add purple_certificate_pool_delete
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18898
diff changeset
1095 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
1096 x509_tls_peers_get_idlist, /* idlist retriever */
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1097
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1098 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1099 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1100 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1101 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
1102 };
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1103
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1104
19033
8b046b73c2d6 - Add skeleton for X.509 Certificate Authority (x509_ca) CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19032
diff changeset
1105 /***** 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
1106 static PurpleCertificateVerifier x509_tls_cached;
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1107
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1108
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1109 /* 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
1110 * 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
1111 * given to user_auth in order to rebuild the dialog.
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1112 */
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1113 /* 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
1114 closed by handle or otherwise abnormally. */
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1115 typedef struct {
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1116 PurpleCertificateVerificationRequest *vrq;
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1117 gchar *reason;
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1118 } x509_tls_cached_ua_ctx;
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1119
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1120 static x509_tls_cached_ua_ctx *
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1121 x509_tls_cached_ua_ctx_new(PurpleCertificateVerificationRequest *vrq,
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1122 const gchar *reason)
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1123 {
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1124 x509_tls_cached_ua_ctx *c;
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1125
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1126 c = g_new0(x509_tls_cached_ua_ctx, 1);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1127 c->vrq = vrq;
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1128 c->reason = g_strdup(reason);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1129
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1130 return c;
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1131 }
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1132
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1133
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1134 static void
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1135 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
1136 {
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1137 g_return_if_fail(c);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1138 g_free(c->reason);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1139 g_free(c);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1140 }
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1141
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1142 static void
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1143 x509_tls_cached_user_auth(PurpleCertificateVerificationRequest *vrq,
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1144 const gchar *reason);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1145
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1146 static void
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1147 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
1148 {
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1149 PurpleCertificate *disp_crt = c->vrq->cert_chain->data;
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1150
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1151 /* Since clicking a button closes the request, show it again */
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1152 x509_tls_cached_user_auth(c->vrq, c->reason);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1153
19727
4b40eed9fe69 When you have a certificate dialog and you click on "View Certificate",
Mark Doliner <markdoliner@pidgin.im>
parents: 19715
diff changeset
1154 /* 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
1155 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
1156 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
1157
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1158 x509_tls_cached_ua_ctx_free(c);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1159 }
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1160
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1161 static void
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1162 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
1163 {
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1164 PurpleCertificateVerificationRequest *vrq;
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1165 PurpleCertificatePool *tls_peers;
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1166
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1167 g_return_if_fail(c);
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1168 g_return_if_fail(c->vrq);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1169
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1170 vrq = c->vrq;
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1171
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1172 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
1173
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1174 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
1175
19491
fad93a93ec11 - Fix the interpretation of the "accept cert? yes/no" choice id given by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19490
diff changeset
1176 if (2 == id) {
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1177 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
1178 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
1179 "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
1180 cache_id);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1181
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1182 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
1183 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
1184
1ba9955f993a - Remove all usage of purple_certificate_verify_destroy, as it is
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19030
diff changeset
1185 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
1186 PURPLE_CERTIFICATE_VALID);
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1187 } 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
1188 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
1189 "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
1190 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
1191 PURPLE_CERTIFICATE_INVALID);
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1192 }
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1193 }
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1194
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
1195 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
1196 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
1197 {
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1198 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
1199 }
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1200
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1201 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
1202 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
1203 {
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1204 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
1205 }
d19f50a6ac42 There's some disagreement over the response-id sent to the callbacks to
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19668
diff changeset
1206
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1207 /** Validates a certificate by asking the user
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1208 * @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
1209 * certificate.
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1210 * @todo Needs a handle argument
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1211 */
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1212 static void
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1213 x509_tls_cached_user_auth(PurpleCertificateVerificationRequest *vrq,
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1214 const gchar *reason)
18589
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1215 {
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1216 gchar *primary;
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1217
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1218 /* Make messages */
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1219 primary = g_strdup_printf(_("Accept certificate for %s?"),
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1220 vrq->subject_name);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1221
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1222 /* Make a semi-pretty display */
21175
c6d76b49c206 disapproval of revision '8ba833993a115415727bb1b70362e0bd1603c169'
Richard Laager <rlaager@pidgin.im>
parents: 21174
diff changeset
1223 purple_request_action(
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1224 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
1225 _("SSL Certificate Verification"),
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1226 primary,
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1227 reason,
22268
a6f48dec4ca5 A few more "purple_request_action" default action corrections
Mark Doliner <markdoliner@pidgin.im>
parents: 22050
diff changeset
1228 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
1229 NULL, /* No account */
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1230 NULL, /* No other user */
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1231 NULL, /* No associated conversation */
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1232 x509_tls_cached_ua_ctx_new(vrq, reason),
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1233 3, /* Number of actions */
19697
276fb2a3d805 - Change wording on certificate accept/reject dialog
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19688
diff changeset
1234 _("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
1235 _("Reject"), x509_tls_cached_user_auth_reject_cb,
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1236 _("_View Certificate..."), x509_tls_cached_show_cert);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1237
18590
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1238 /* Cleanup */
d240b212c2d4 - Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18589
diff changeset
1239 g_free(primary);
18589
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1240 }
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1241
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1242 static void
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
1243 x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq);
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
1244
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
1245 static void
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1246 x509_tls_cached_cert_in_cache(PurpleCertificateVerificationRequest *vrq)
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1247 {
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1248 /* 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
1249 Fix, please! */
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1250 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
1251 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
1252 "tls_peers");
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1253
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1254 /* 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
1255 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
1256 (PurpleCertificate *) vrq->cert_chain->data;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1257
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1258 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
1259 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
1260
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1261 /* 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
1262 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
1263 tls_peers, vrq->subject_name);
19715
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1264 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
1265 purple_debug_warning("certificate/x509/tls_cached",
19715
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1266 "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
1267 "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
1268 /* vrq now becomes the problem of unknown_peer */
8eb52a9d3a6d Continue verification when we can't find a *cached* peer. Fixes #9664.
Paul Aurich <darkrain42@pidgin.im>
parents: 27788
diff changeset
1269 x509_tls_cached_unknown_peer(vrq);
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
1270 return;
19715
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1271 }
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1272
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1273 /* Now get SHA1 sums for both and compare them */
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1274 /* TODO: This is not an elegant way to compare certs */
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1275 peer_fpr = purple_certificate_get_fingerprint_sha1(peer_crt);
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1276 cached_fpr = purple_certificate_get_fingerprint_sha1(cached_crt);
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1277 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
1278 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
1279 "Peer cert matched cached\n");
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1280 /* vrq is now finished */
19031
1ba9955f993a - Remove all usage of purple_certificate_verify_destroy, as it is
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19030
diff changeset
1281 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
1282 PURPLE_CERTIFICATE_VALID);
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1283 } 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
1284 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
1285 "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
1286 /* vrq now becomes the problem of the user */
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
1287 x509_tls_cached_unknown_peer(vrq);
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1288 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1289
19026
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1290 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
1291 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
1292 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
1293 }
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1294
19025
8b4c3e863a53 In tls_cached Verifier:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19024
diff changeset
1295 /* For when we've never communicated with this party before */
19864
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1296 /* TODO: Need ways to specify possibly multiple problems with a cert, or at
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1297 least reprioritize them. For example, maybe the signature ought to be
22048
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1298 checked BEFORE the hostname checking?
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1299 Stu thinks we should check the signature before the name, so we do now.
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1300 The above TODO still stands. */
19025
8b4c3e863a53 In tls_cached Verifier:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19024
diff changeset
1301 static void
8b4c3e863a53 In tls_cached Verifier:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19024
diff changeset
1302 x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq)
8b4c3e863a53 In tls_cached Verifier:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19024
diff changeset
1303 {
19029
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1304 PurpleCertificatePool *ca, *tls_peers;
19030
e2bf9dcb2b72 - Add HOSTNAME CHECKING to tls_cached unknown_peer mode, which is kind
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19029
diff changeset
1305 PurpleCertificate *end_crt, *ca_crt, *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
1306 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
1307 GList *last;
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1308 gchar *ca_id;
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1309
19030
e2bf9dcb2b72 - Add HOSTNAME CHECKING to tls_cached unknown_peer mode, which is kind
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19029
diff changeset
1310 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
1311
19864
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1312 /* TODO: Figure out a way to check for a bad signature, as opposed to
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1313 "not self-signed" */
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1314 if ( purple_certificate_signed_by(peer_crt, peer_crt) ) {
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1315 gchar *msg;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1316
19864
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1317 purple_debug_info("certificate/x509/tls_cached",
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1318 "Certificate for %s is self-signed.\n",
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1319 vrq->subject_name);
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1320
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1321 /* Prompt the user to authenticate the certificate */
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1322 /* vrq will be completed by user_auth */
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1323 msg = g_strdup_printf(_("The certificate presented by \"%s\" "
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1324 "is self-signed. It cannot be "
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1325 "automatically checked."),
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1326 vrq->subject_name);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1327
19864
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1328 x509_tls_cached_user_auth(vrq,msg);
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1329
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1330 g_free(msg);
ab4d16d072b8 - Add specific notification for self-signed certificates. Fixes #2874
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
1331 return;
22048
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1332 } /* if (self signed) */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1333
19030
e2bf9dcb2b72 - Add HOSTNAME CHECKING to tls_cached unknown_peer mode, which is kind
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19029
diff changeset
1334 /* Next, check that the certificate chain is valid */
19029
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1335 if ( ! purple_certificate_check_signature_chain(chain) ) {
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1336 /* TODO: Tell the user where the chain broke? */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1337 /* TODO: This error will hopelessly confuse any
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1338 non-elite user. */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1339 gchar *secondary;
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1340
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1341 secondary = g_strdup_printf(_("The certificate chain presented"
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1342 " for %s is not valid."),
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1343 vrq->subject_name);
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1344
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1345 /* TODO: Make this error either block the ensuing SSL
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1346 connection error until the user dismisses this one, or
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1347 stifle it. */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1348 purple_notify_error(NULL, /* TODO: Probably wrong. */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1349 _("SSL Certificate Error"),
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1350 _("Invalid certificate chain"),
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1351 secondary );
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1352 g_free(secondary);
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1353
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1354 /* Okay, we're done here */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1355 purple_certificate_verify_complete(vrq,
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1356 PURPLE_CERTIFICATE_INVALID);
21639
bba8a41434dd Don't crash when connecting to jabber.freenet.de. Michael Weitzel sent
Mark Doliner <markdoliner@pidgin.im>
parents: 21233
diff changeset
1357 return;
19029
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1358 } /* if (signature chain not good) */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1359
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1360 /* Next, attempt to verify the last certificate against a CA */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1361 ca = purple_certificate_find_pool(x509_tls_cached.scheme_name, "ca");
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1362
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1363 /* If, for whatever reason, there is no Certificate Authority pool
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1364 loaded, we will simply present it to the user for checking. */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1365 if ( !ca ) {
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1366 purple_debug_error("certificate/x509/tls_cached",
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1367 "No X.509 Certificate Authority pool "
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1368 "could be found!\n");
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1369
19029
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1370 /* vrq will be completed by user_auth */
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1371 x509_tls_cached_user_auth(vrq,_("You have no database of root "
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1372 "certificates, so this "
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1373 "certificate cannot be "
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1374 "validated."));
19029
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1375 return;
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1376 }
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1377
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1378 last = g_list_last(chain);
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1379 end_crt = (PurpleCertificate *) last->data;
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1380
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1381 /* Attempt to look up the last certificate's issuer */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1382 ca_id = purple_certificate_get_issuer_unique_id(end_crt);
19352
ec5dc55688cb - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19351
diff changeset
1383 purple_debug_info("certificate/x509/tls_cached",
ec5dc55688cb - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19351
diff changeset
1384 "Checking for a CA with DN=%s\n",
ec5dc55688cb - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19351
diff changeset
1385 ca_id);
20831
5d1a42e25d6f - Use certificate_pool_retrieve instead of certificate_pool_contains and
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20162
diff changeset
1386 ca_crt = purple_certificate_pool_retrieve(ca, ca_id);
5d1a42e25d6f - Use certificate_pool_retrieve instead of certificate_pool_contains and
William Ehlhardt <williamehlhardt@gmail.com>
parents: 20162
diff changeset
1387 if ( NULL == ca_crt ) {
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
1388 purple_debug_warning("certificate/x509/tls_cached",
19029
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1389 "Certificate Authority with DN='%s' not "
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1390 "found. I'll prompt the user, I guess.\n",
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1391 ca_id);
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1392 g_free(ca_id);
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1393 /* vrq will be completed by user_auth */
19490
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1394 x509_tls_cached_user_auth(vrq,_("The root certificate this "
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1395 "one claims to be issued by "
732f7a5c075d In tls_cached:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19489
diff changeset
1396 "is unknown to Pidgin."));
19029
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1397 return;
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1398 }
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1399
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1400 g_free(ca_id);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1401
19029
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1402 /* Check the signature */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1403 if ( !purple_certificate_signed_by(end_crt, ca_crt) ) {
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1404 /* TODO: If signed_by ever returns a reason, maybe mention
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1405 that, too. */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1406 /* TODO: Also mention the CA involved. While I could do this
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1407 now, a full DN is a little much with which to assault the
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1408 user's poor, leaky eyes. */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1409 /* TODO: This error message makes my eyes cross, and I wrote it */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1410 gchar * secondary =
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1411 g_strdup_printf(_("The certificate chain presented by "
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1412 "%s does not have a valid digital "
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1413 "signature from the Certificate "
19498
a73bb5326a93 - Reword some dialogs
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19492
diff changeset
1414 "Authority from which it claims to "
19500
9e308787dd82 - TODO whacking and cosmetics
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19499
diff changeset
1415 "have a signature."),
19029
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1416 vrq->subject_name);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1417
19029
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1418 purple_notify_error(NULL, /* TODO: Probably wrong */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1419 _("SSL Certificate Error"),
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1420 _("Invalid certificate authority"
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1421 " signature"),
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1422 secondary);
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1423 g_free(secondary);
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1424
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1425 /* Signal "bad cert" */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1426 purple_certificate_verify_complete(vrq,
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1427 PURPLE_CERTIFICATE_INVALID);
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1428 return;
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1429 } /* if (CA signature not good) */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1430
22048
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1431 /* 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
1432 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
1433 vrq->subject_name) ) {
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1434 gchar *sn = purple_certificate_get_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
1435 gchar *msg;
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1436
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
1437 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
1438 "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
1439 "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
1440 vrq->subject_name, sn);
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1441
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1442 /* Prompt the user to authenticate the certificate */
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1443 /* TODO: Provide the user with more guidance about why he is
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1444 being prompted */
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1445 /* vrq will be completed by user_auth */
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1446 msg = g_strdup_printf(_("The certificate presented by \"%s\" "
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1447 "claims to be from \"%s\" instead. "
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1448 "This could mean that you are not "
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1449 "connecting to the service you "
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1450 "believe you are."),
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1451 vrq->subject_name, sn);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1452
22048
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1453 x509_tls_cached_user_auth(vrq,msg);
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1454
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1455 g_free(sn);
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1456 g_free(msg);
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1457 return;
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1458 } /* if (name mismatch) */
be245d92600e Add the StartCom Free SSL Certificate Authority certificate (as used by
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22006
diff changeset
1459
19029
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1460 /* If we reach this point, the certificate is good. */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1461 /* Look up the local cache and store it there for future use */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1462 tls_peers = purple_certificate_find_pool(x509_tls_cached.scheme_name,
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1463 "tls_peers");
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1464
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1465 if (tls_peers) {
19715
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1466 if (!purple_certificate_pool_store(tls_peers,vrq->subject_name,
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1467 peer_crt) ) {
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1468 purple_debug_error("certificate/x509/tls_cached",
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1469 "FAILED to cache peer certificate\n");
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1470 }
19029
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1471 } else {
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1472 purple_debug_error("certificate/x509/tls_cached",
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1473 "Unable to locate tls_peers certificate "
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1474 "cache.\n");
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1475 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1476
19029
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1477 /* Whew! Done! */
d7a6db2a1edd - Wrote a tls_cached unknown_peer function that does many fun things,
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19028
diff changeset
1478 purple_certificate_verify_complete(vrq, PURPLE_CERTIFICATE_VALID);
19025
8b4c3e863a53 In tls_cached Verifier:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19024
diff changeset
1479 }
8b4c3e863a53 In tls_cached Verifier:
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19024
diff changeset
1480
18589
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1481 static void
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1482 x509_tls_cached_start_verify(PurpleCertificateVerificationRequest *vrq)
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1483 {
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1484 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
1485 PurpleCertificatePool *tls_peers;
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1486 time_t now, activation, expiration;
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1487 gboolean ret;
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1488
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1489 g_return_if_fail(vrq);
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1490
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1491 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
1492 "Starting verify for %s\n",
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1493 vrq->subject_name);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1494
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1495 /*
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1496 * 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
1497 * 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
1498 */
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1499 now = time(NULL);
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1500 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
1501 &expiration);
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1502 if (!ret || now > expiration || now < activation) {
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1503 gchar *secondary;
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1504
27932
bd122d5593b4 Better errors for certificate expiration/activation checking.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
1505 if (!ret) {
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1506 purple_debug_error("certificate/x509/tls_cached",
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1507 "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
1508 vrq->subject_name);
27932
bd122d5593b4 Better errors for certificate expiration/activation checking.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
1509 secondary = g_strdup_printf(_("Failed to validate expiration time "
bd122d5593b4 Better errors for certificate expiration/activation checking.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
1510 "for %s"), vrq->subject_name);
bd122d5593b4 Better errors for certificate expiration/activation checking.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
1511 } else if (now > expiration) {
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1512 purple_debug_error("certificate/x509/tls_cached",
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1513 "Certificate %s expired at %s\n",
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1514 vrq->subject_name, ctime(&expiration));
27932
bd122d5593b4 Better errors for certificate expiration/activation checking.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
1515 secondary = g_strdup_printf(_("The certificate for %s is expired."),
bd122d5593b4 Better errors for certificate expiration/activation checking.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
1516 vrq->subject_name);
bd122d5593b4 Better errors for certificate expiration/activation checking.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
1517 } else {
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1518 purple_debug_error("certificate/x509/tls_cached",
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1519 "Certificate %s is not yet valid, will be at %s\n",
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1520 vrq->subject_name, ctime(&activation));
27932
bd122d5593b4 Better errors for certificate expiration/activation checking.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
1521 secondary = g_strdup_printf(_("The certificate for %s should not "
bd122d5593b4 Better errors for certificate expiration/activation checking.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
1522 "yet be in use."), vrq->subject_name);
bd122d5593b4 Better errors for certificate expiration/activation checking.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
1523 }
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1524
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1525 purple_notify_error(NULL, /* TODO: Probably wrong. */
27932
bd122d5593b4 Better errors for certificate expiration/activation checking.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
1526 _("SSL Certificate Error"),
bd122d5593b4 Better errors for certificate expiration/activation checking.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
1527 _("Invalid certificate chain"),
bd122d5593b4 Better errors for certificate expiration/activation checking.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
1528 secondary );
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1529 g_free(secondary);
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1530
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1531 /* Okay, we're done here */
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1532 purple_certificate_verify_complete(vrq,
27932
bd122d5593b4 Better errors for certificate expiration/activation checking.
Paul Aurich <darkrain42@pidgin.im>
parents: 27925
diff changeset
1533 PURPLE_CERTIFICATE_INVALID);
27925
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1534 return;
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1535 }
c84c4837876c Check expiration/activation times on certificates. Closes #8226.
Paul Aurich <darkrain42@pidgin.im>
parents: 27823
diff changeset
1536
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1537 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
1538
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1539 if (!tls_peers) {
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1540 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
1541 "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
1542 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
1543
20143
5b005012e908 applied changes from 92e6c32278d711f0d5807c4d931b26162e4a720f
Richard Laager <rlaager@pidgin.im>
parents: 19864
diff changeset
1544
5b005012e908 applied changes from 92e6c32278d711f0d5807c4d931b26162e4a720f
Richard Laager <rlaager@pidgin.im>
parents: 19864
diff changeset
1545 /* vrq now becomes the problem of unknown_peer */
5b005012e908 applied changes from 92e6c32278d711f0d5807c4d931b26162e4a720f
Richard Laager <rlaager@pidgin.im>
parents: 19864
diff changeset
1546 x509_tls_cached_unknown_peer(vrq);
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1547 return;
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1548 }
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1549
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1550 /* 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
1551 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
1552 "Checking for cached cert...\n");
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1553 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
1554 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
1555 "...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
1556 /* vrq is now the responsibility of cert_in_cache */
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1557 x509_tls_cached_cert_in_cache(vrq);
a814165b098f - Move "certificate found in cache" out of tls_cached_start_verify into
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19025
diff changeset
1558 } 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
1559 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
1560 "...Not in cache\n");
18589
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1561 /* vrq now becomes the problem of unknown_peer */
f828ef45c34e - More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18588
diff changeset
1562 x509_tls_cached_unknown_peer(vrq);
18588
91ad034f1904 - Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18585
diff changeset
1563 }
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1564 }
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1565
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1566 static void
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1567 x509_tls_cached_destroy_request(PurpleCertificateVerificationRequest *vrq)
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1568 {
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1569 g_return_if_fail(vrq);
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1570 }
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1571
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1572 static PurpleCertificateVerifier x509_tls_cached = {
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1573 "x509", /* Scheme name */
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1574 "tls_cached", /* Verifier name */
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1575 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
1576 x509_tls_cached_destroy_request,/* Request cleanup */
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1577
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1578 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1579 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1580 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1581 NULL
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19727
diff changeset
1582
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1583 };
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
1584
18470
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1585 /****************************************************************************/
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1586 /* Subsystem */
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1587 /****************************************************************************/
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1588 void
18477
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1589 purple_certificate_init(void)
18470
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1590 {
18477
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1591 /* Register builtins */
18473
a7251d502f6a - Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18472
diff changeset
1592 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
1593 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
1594 purple_certificate_register_pool(&x509_tls_peers);
18582
2341c741705b - Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18581
diff changeset
1595 purple_certificate_register_verifier(&x509_tls_cached);
18470
6a1deea19882 - Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18469
diff changeset
1596 }
18466
881319eb171d - Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18463
diff changeset
1597
18477
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1598 void
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1599 purple_certificate_uninit(void)
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1600 {
18659
89e08c113e68 - Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18658
diff changeset
1601 /* 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
1602 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
1603
89e08c113e68 - Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18658
diff changeset
1604 /* 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
1605 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
1606 }
47243c0d52c6 - Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18473
diff changeset
1607
18657
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1608 gpointer
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1609 purple_certificate_get_handle(void)
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1610 {
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1611 static gint handle;
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1612 return &handle;
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1613 }
4932aaf945ea - Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18656
diff changeset
1614
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1615 PurpleCertificateScheme *
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1616 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
1617 {
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1618 PurpleCertificateScheme *scheme = NULL;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1619 GList *l;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1620
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1621 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
1622
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1623 /* 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
1624 one whose name matches */
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1625 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
1626 scheme = (PurpleCertificateScheme *)(l->data);
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1627
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1628 /* Name matches? that's our man */
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1629 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
1630 return scheme;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1631 }
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
1632
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1633 purple_debug_warning("certificate",
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1634 "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
1635 name);
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
1636
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1637 /* TODO: Signalling and such? */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1638
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1639 return NULL;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1640 }
17506
eff6bdd382f3 - Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff changeset
1641
18658
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1642 GList *
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1643 purple_certificate_get_schemes(void)
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1644 {
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1645 return cert_schemes;
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1646 }
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1647
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1648 gboolean
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1649 purple_certificate_register_scheme(PurpleCertificateScheme *scheme)
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1650 {
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1651 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
1652
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1653 /* 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
1654 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
1655 return FALSE;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1656 }
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1657
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1658 /* Okay, we're golden. Register it. */
18491
2aa829b48785 - prepend > append
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18490
diff changeset
1659 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
1660
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1661 /* TODO: Signalling and such? */
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1662
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1663 purple_debug_info("certificate",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1664 "CertificateScheme %s registered\n",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1665 scheme->name);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1666
18251
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1667 return TRUE;
41e00264c49d - Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17509
diff changeset
1668 }
18446
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1669
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1670 gboolean
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1671 purple_certificate_unregister_scheme(PurpleCertificateScheme *scheme)
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1672 {
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1673 if (NULL == scheme) {
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1674 purple_debug_warning("certificate",
18492
1ebf50a37d55 - Fix some errors and return values
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18491
diff changeset
1675 "Attempting to unregister NULL scheme\n");
1ebf50a37d55 - Fix some errors and return values
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18491
diff changeset
1676 return FALSE;
18446
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1677 }
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1678
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1679 /* TODO: signalling? */
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1680
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1681 /* TODO: unregister all CertificateVerifiers for this scheme?*/
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1682 /* TODO: unregister all CertificatePools for this scheme? */
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1683 /* Neither of the above should be necessary, though */
18446
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1684 cert_schemes = g_list_remove(cert_schemes, scheme);
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1685
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1686 purple_debug_info("certificate",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1687 "CertificateScheme %s unregistered\n",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1688 scheme->name);
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1689
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1690
18446
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1691 return TRUE;
3e79caab7088 - Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18251
diff changeset
1692 }
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1693
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1694 PurpleCertificateVerifier *
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1695 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
1696 {
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1697 PurpleCertificateVerifier *vr = NULL;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1698 GList *l;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1699
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1700 g_return_val_if_fail(scheme_name, NULL);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1701 g_return_val_if_fail(ver_name, NULL);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1702
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1703 /* Traverse the list of registered verifiers and locate the
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1704 one whose name matches */
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1705 for(l = cert_verifiers; l; l = l->next) {
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1706 vr = (PurpleCertificateVerifier *)(l->data);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1707
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1708 /* Scheme and name match? */
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1709 if(!g_ascii_strcasecmp(vr->scheme_name, scheme_name) &&
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1710 !g_ascii_strcasecmp(vr->name, ver_name))
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1711 return vr;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1712 }
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1713
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1714 purple_debug_warning("certificate",
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1715 "CertificateVerifier %s, %s requested but not found.\n",
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1716 scheme_name, ver_name);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1717
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1718 /* TODO: Signalling and such? */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1719
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1720 return NULL;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1721 }
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1722
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1723
18658
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1724 GList *
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1725 purple_certificate_get_verifiers(void)
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1726 {
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1727 return cert_verifiers;
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1728 }
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1729
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1730 gboolean
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1731 purple_certificate_register_verifier(PurpleCertificateVerifier *vr)
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1732 {
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1733 g_return_val_if_fail(vr != NULL, FALSE);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1734
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1735 /* 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
1736 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
1737 return FALSE;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1738 }
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1739
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1740 /* Okay, we're golden. Register it. */
18491
2aa829b48785 - prepend > append
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18490
diff changeset
1741 cert_verifiers = g_list_prepend(cert_verifiers, vr);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1742
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1743 /* TODO: Signalling and such? */
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1744
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1745 purple_debug_info("certificate",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1746 "CertificateVerifier %s registered\n",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1747 vr->name);
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1748 return TRUE;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1749 }
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1750
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1751 gboolean
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1752 purple_certificate_unregister_verifier(PurpleCertificateVerifier *vr)
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1753 {
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1754 if (NULL == vr) {
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1755 purple_debug_warning("certificate",
18492
1ebf50a37d55 - Fix some errors and return values
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18491
diff changeset
1756 "Attempting to unregister NULL verifier\n");
1ebf50a37d55 - Fix some errors and return values
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18491
diff changeset
1757 return FALSE;
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1758 }
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1759
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1760 /* TODO: signalling? */
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1761
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1762 cert_verifiers = g_list_remove(cert_verifiers, vr);
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1763
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1764
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1765 purple_debug_info("certificate",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1766 "CertificateVerifier %s unregistered\n",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1767 vr->name);
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1768
18461
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1769 return TRUE;
8ae1cd456532 - CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18446
diff changeset
1770 }
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1771
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1772 PurpleCertificatePool *
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1773 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
1774 {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1775 PurpleCertificatePool *pool = NULL;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1776 GList *l;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1777
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1778 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
1779 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
1780
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1781 /* 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
1782 one whose name matches */
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1783 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
1784 pool = (PurpleCertificatePool *)(l->data);
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1785
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1786 /* Scheme and name match? */
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1787 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
1788 !g_ascii_strcasecmp(pool->name, pool_name))
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1789 return pool;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1790 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1791
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1792 purple_debug_warning("certificate",
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1793 "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
1794 scheme_name, pool_name);
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1795
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1796 /* TODO: Signalling and such? */
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1797
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1798 return NULL;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1799
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1800 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1801
18658
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1802 GList *
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1803 purple_certificate_get_pools(void)
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1804 {
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1805 return cert_pools;
2cc5bc32898a - Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18657
diff changeset
1806 }
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1807
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1808 gboolean
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1809 purple_certificate_register_pool(PurpleCertificatePool *pool)
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1810 {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1811 g_return_val_if_fail(pool, FALSE);
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1812 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
1813 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
1814 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
1815
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1816 /* 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
1817 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
1818 return FALSE;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1819 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1820
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1821 /* Initialize the pool if needed */
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1822 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
1823 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
1824
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
1825 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
1826 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
1827 return FALSE;
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1828 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1829
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
1830 /* 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
1831 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
1832
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
1833 /* 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
1834
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
1835 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
1836 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
1837 "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
1838 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
1839 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
1840 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
1841 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
1842 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
1843 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
1844
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
1845 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
1846 "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
1847 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
1848 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
1849 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
1850 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
1851 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
1852 purple_value_new(PURPLE_TYPE_STRING));
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1853
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
1854 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
1855 "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
1856 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
1857
235394d5c7f4 Pull a bunch of bugfix only changes to im.pidgin.pidgin.2.3.1,
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21646
diff changeset
1858 return TRUE;
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1859 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1860
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1861 gboolean
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1862 purple_certificate_unregister_pool(PurpleCertificatePool *pool)
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1863 {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1864 if (NULL == pool) {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1865 purple_debug_warning("certificate",
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1866 "Attempting to unregister NULL pool\n");
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1867 return FALSE;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1868 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1869
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1870 /* Check that the pool is registered */
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1871 if (!g_list_find(cert_pools, pool)) {
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1872 purple_debug_warning("certificate",
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1873 "Pool to unregister isn't registered!\n");
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1874
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1875 return FALSE;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1876 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1877
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1878 /* 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
1879 PURPLE_DBUS_UNREGISTER_POINTER(pool);
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1880 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
1881 pool->uninit();
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1882 }
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1883
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1884 cert_pools = g_list_remove(cert_pools, pool);
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1885
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1886 /* TODO: Signalling? */
18894
1a00d2309d39 - Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18818
diff changeset
1887 purple_signal_unregister(pool, "certificate-stored");
1a00d2309d39 - Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18818
diff changeset
1888 purple_signal_unregister(pool, "certificate-deleted");
25888
d0fdd378a635 Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents: 25859
diff changeset
1889
19003
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1890 purple_debug_info("certificate",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1891 "CertificatePool %s unregistered\n",
0998b8659565 - Add debugging babble for registers/unregisters
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19000
diff changeset
1892 pool->name);
18490
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1893 return TRUE;
691b0b16f8be - Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18483
diff changeset
1894 }
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1895
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1896 /****************************************************************************/
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1897 /* Scheme-specific functions */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1898 /****************************************************************************/
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1899
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1900 void
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1901 purple_certificate_display_x509(PurpleCertificate *crt)
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1902 {
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1903 gchar *sha_asc;
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1904 GByteArray *sha_bin;
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1905 gchar *cn;
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1906 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
1907 gchar *activ_str, *expir_str;
19492
b8dff22498f6 - Fix some g_free()s of string constants that caused crashing
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19491
diff changeset
1908 gchar *secondary;
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1909
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1910 /* Pull out the SHA1 checksum */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1911 sha_bin = purple_certificate_get_fingerprint_sha1(crt);
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1912 /* Now decode it for display */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1913 sha_asc = purple_base16_encode_chunked(sha_bin->data,
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1914 sha_bin->len);
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1915
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1916 /* Get the cert Common Name */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1917 /* TODO: Will break on CA certs */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1918 cn = purple_certificate_get_subject_name(crt);
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1919
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1920 /* Get the certificate times */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1921 /* TODO: Check the times against localtime */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1922 /* TODO: errorcheck? */
19715
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1923 if (!purple_certificate_get_times(crt, &activation, &expiration)) {
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1924 purple_debug_error("certificate",
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1925 "Failed to get certificate times!\n");
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1926 activation = expiration = 0;
b548029f18aa - Remove g_assert()s. Fixes #2859
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19697
diff changeset
1927 }
19668
2071903c58e4 Fix the win32 build for the cert SoC branch merge.
Daniel Atallah <datallah@pidgin.im>
parents: 19500
diff changeset
1928 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
1929 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
1930
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1931 /* Make messages */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1932 secondary = g_strdup_printf(_("Common name: %s\n\n"
24488
9b4d7aa767a2 Fix a printf("%s", NULL). Fixes #7289.
Daniel Atallah <datallah@pidgin.im>
parents: 24182
diff changeset
1933 "Fingerprint (SHA1): %s\n\n"
9b4d7aa767a2 Fix a printf("%s", NULL). Fixes #7289.
Daniel Atallah <datallah@pidgin.im>
parents: 24182
diff changeset
1934 "Activation date: %s\n"
9b4d7aa767a2 Fix a printf("%s", NULL). Fixes #7289.
Daniel Atallah <datallah@pidgin.im>
parents: 24182
diff changeset
1935 "Expiration date: %s\n"),
9b4d7aa767a2 Fix a printf("%s", NULL). Fixes #7289.
Daniel Atallah <datallah@pidgin.im>
parents: 24182
diff changeset
1936 cn ? cn : "(null)",
9b4d7aa767a2 Fix a printf("%s", NULL). Fixes #7289.
Daniel Atallah <datallah@pidgin.im>
parents: 24182
diff changeset
1937 sha_asc ? sha_asc : "(null)",
9b4d7aa767a2 Fix a printf("%s", NULL). Fixes #7289.
Daniel Atallah <datallah@pidgin.im>
parents: 24182
diff changeset
1938 activ_str ? activ_str : "(null)",
9b4d7aa767a2 Fix a printf("%s", NULL). Fixes #7289.
Daniel Atallah <datallah@pidgin.im>
parents: 24182
diff changeset
1939 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
1940
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1941 /* Make a semi-pretty display */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1942 purple_notify_info(
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1943 NULL, /* TODO: Find what the handle ought to be */
19492
b8dff22498f6 - Fix some g_free()s of string constants that caused crashing
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19491
diff changeset
1944 _("Certificate Information"),
b8dff22498f6 - Fix some g_free()s of string constants that caused crashing
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19491
diff changeset
1945 "",
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1946 secondary);
19668
2071903c58e4 Fix the win32 build for the cert SoC branch merge.
Daniel Atallah <datallah@pidgin.im>
parents: 19500
diff changeset
1947
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1948 /* Cleanup */
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1949 g_free(cn);
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1950 g_free(secondary);
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1951 g_free(sha_asc);
19668
2071903c58e4 Fix the win32 build for the cert SoC branch merge.
Daniel Atallah <datallah@pidgin.im>
parents: 19500
diff changeset
1952 g_free(activ_str);
2071903c58e4 Fix the win32 build for the cert SoC branch merge.
Daniel Atallah <datallah@pidgin.im>
parents: 19500
diff changeset
1953 g_free(expir_str);
19489
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1954 g_byte_array_free(sha_bin, TRUE);
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1955 }
772b691e901b - Add purple_certificate_display_x509
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19484
diff changeset
1956
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
1957 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
1958 {
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
1959 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
1960 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
1961 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
1962 }
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
1963

mercurial