libpurple/certificate.c

Thu, 01 Jan 2009 18:15:17 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Thu, 01 Jan 2009 18:15:17 +0000
branch
cpw.malu.xmpp.idle
changeset 25497
c3eccf04560f
parent 25275
b28406cfe56a
child 25467
9631ed4f4527
child 25859
b42be7bb9dac
permissions
-rw-r--r--

propagate from branch 'im.pidgin.pidgin' (head 35870d6d8caeefa3bc9d39f03fed349271c2ad92)
to branch 'im.pidgin.cpw.malu.xmpp.idle' (head 8193c6b465e45dc7251a394b5e37413d882baa43)

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

mercurial