Mercurial > pidgin.yaz
annotate libpurple/certificate.c @ 19044:602295db8e6b
- Register the certificate-stored and certificate-deleted signals
author | William Ehlhardt <williamehlhardt@gmail.com> |
---|---|
date | Fri, 27 Jul 2007 06:56:00 +0000 |
parents | 8b627694bf4a |
children | 8599a27ad69c |
rev | line source |
---|---|
17638
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
1 /** |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
2 * @file certificate.h Public-Key Certificate API |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
3 * @ingroup core |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
4 */ |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
5 |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
6 /* |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
7 * |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
8 * purple |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
9 * |
668a294f9a72
- 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 |
668a294f9a72
- 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 |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
12 * source distribution. |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
13 * |
668a294f9a72
- 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 |
668a294f9a72
- 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 |
668a294f9a72
- 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 |
668a294f9a72
- 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. |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
18 * |
668a294f9a72
- 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, |
668a294f9a72
- 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 |
668a294f9a72
- 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 |
668a294f9a72
- 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. |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
23 * |
668a294f9a72
- 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 |
668a294f9a72
- 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 |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
26 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
27 */ |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
28 |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
29 #include <glib.h> |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
30 |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
31 #include "certificate.h" |
18192
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
32 #include "debug.h" |
18953
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
33 #include "internal.h" |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
34 #include "request.h" |
19044
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
35 #include "signals.h" |
18953
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
36 #include "util.h" |
17638
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
37 |
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
38 /** List holding pointers to all registered certificate schemes */ |
18192
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
39 static GList *cert_schemes = NULL; |
18941
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
40 /** List of registered Verifiers */ |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
41 static GList *cert_verifiers = NULL; |
18971
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
42 /** List of registered Pools */ |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
43 static GList *cert_pools = NULL; |
18941
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
44 |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
45 void |
18942
02102eccc4be
- purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18941
diff
changeset
|
46 purple_certificate_verify (PurpleCertificateVerifier *verifier, |
02102eccc4be
- purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18941
diff
changeset
|
47 const gchar *subject_name, GList *cert_chain, |
18941
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
48 PurpleCertificateVerifiedCallback cb, |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
49 gpointer cb_data) |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
50 { |
18942
02102eccc4be
- purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18941
diff
changeset
|
51 PurpleCertificateVerificationRequest *vrq; |
18941
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
52 PurpleCertificateScheme *scheme; |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
53 |
18942
02102eccc4be
- purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18941
diff
changeset
|
54 g_return_if_fail(subject_name != NULL); |
18941
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
55 /* If you don't have a cert to check, why are you requesting that it |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
56 be verified? */ |
18942
02102eccc4be
- purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18941
diff
changeset
|
57 g_return_if_fail(cert_chain != NULL); |
02102eccc4be
- purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18941
diff
changeset
|
58 g_return_if_fail(cb != NULL); |
18941
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
59 |
18942
02102eccc4be
- purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18941
diff
changeset
|
60 /* Look up the CertificateScheme */ |
02102eccc4be
- purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18941
diff
changeset
|
61 scheme = purple_certificate_find_scheme(verifier->scheme_name); |
02102eccc4be
- purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18941
diff
changeset
|
62 g_return_if_fail(scheme); |
18941
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
63 |
18943
c519ff185569
- purple_certificate_verify attempts to check that the cert chain is of
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18942
diff
changeset
|
64 /* Check that at least the first cert in the chain matches the |
c519ff185569
- purple_certificate_verify attempts to check that the cert chain is of
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18942
diff
changeset
|
65 Verifier scheme */ |
18960
6831c126bcf3
- Fixed an inverted assertion
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18957
diff
changeset
|
66 g_return_if_fail(scheme == |
18943
c519ff185569
- purple_certificate_verify attempts to check that the cert chain is of
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18942
diff
changeset
|
67 ((PurpleCertificate *) (cert_chain->data))->scheme); |
c519ff185569
- purple_certificate_verify attempts to check that the cert chain is of
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18942
diff
changeset
|
68 |
18941
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
69 /* Construct and fill in the request fields */ |
18949
8902f0d7e40f
- Use g_new0 instead of g_new
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18947
diff
changeset
|
70 vrq = g_new0(PurpleCertificateVerificationRequest, 1); |
18942
02102eccc4be
- purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18941
diff
changeset
|
71 vrq->verifier = verifier; |
02102eccc4be
- purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18941
diff
changeset
|
72 vrq->scheme = scheme; |
02102eccc4be
- purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18941
diff
changeset
|
73 vrq->subject_name = g_strdup(subject_name); |
19021
fcca10d0ac7d
- purple_certificate_verify no longer takes possession of the
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19020
diff
changeset
|
74 vrq->cert_chain = purple_certificate_copy_list(cert_chain); |
18941
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
75 vrq->cb = cb; |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
76 vrq->cb_data = cb_data; |
18942
02102eccc4be
- purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18941
diff
changeset
|
77 |
02102eccc4be
- purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18941
diff
changeset
|
78 /* Initiate verification */ |
02102eccc4be
- purple_certificate_verify now takes a Verifier argument, creates its
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18941
diff
changeset
|
79 (verifier->start_verification)(vrq); |
18941
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
80 } |
18192
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
81 |
18946
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
82 void |
18947
3c6bf77bf7c4
- Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18946
diff
changeset
|
83 purple_certificate_verify_destroy (PurpleCertificateVerificationRequest *vrq) |
3c6bf77bf7c4
- Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18946
diff
changeset
|
84 { |
3c6bf77bf7c4
- Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18946
diff
changeset
|
85 PurpleCertificateVerifier *vr; |
3c6bf77bf7c4
- Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18946
diff
changeset
|
86 |
3c6bf77bf7c4
- Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18946
diff
changeset
|
87 if (NULL == vrq) return; |
3c6bf77bf7c4
- Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18946
diff
changeset
|
88 |
3c6bf77bf7c4
- Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18946
diff
changeset
|
89 /* Fetch the Verifier responsible... */ |
3c6bf77bf7c4
- Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18946
diff
changeset
|
90 vr = vrq->verifier; |
3c6bf77bf7c4
- Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18946
diff
changeset
|
91 /* ...and order it to KILL */ |
3c6bf77bf7c4
- Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18946
diff
changeset
|
92 (vr->destroy_request)(vrq); |
18952
974d110cf7b1
- libpurple is now responsible for some cleanup and final deletion of a
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18950
diff
changeset
|
93 |
974d110cf7b1
- libpurple is now responsible for some cleanup and final deletion of a
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18950
diff
changeset
|
94 /* Now the internals have been cleaned up, so clean up the libpurple- |
974d110cf7b1
- libpurple is now responsible for some cleanup and final deletion of a
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18950
diff
changeset
|
95 created elements */ |
974d110cf7b1
- libpurple is now responsible for some cleanup and final deletion of a
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18950
diff
changeset
|
96 g_free(vrq->subject_name); |
974d110cf7b1
- libpurple is now responsible for some cleanup and final deletion of a
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18950
diff
changeset
|
97 purple_certificate_destroy_list(vrq->cert_chain); |
974d110cf7b1
- libpurple is now responsible for some cleanup and final deletion of a
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18950
diff
changeset
|
98 |
974d110cf7b1
- libpurple is now responsible for some cleanup and final deletion of a
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18950
diff
changeset
|
99 g_free(vrq); |
18947
3c6bf77bf7c4
- Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18946
diff
changeset
|
100 } |
3c6bf77bf7c4
- Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18946
diff
changeset
|
101 |
19018
d6f902265076
- Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19014
diff
changeset
|
102 PurpleCertificate * |
d6f902265076
- Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19014
diff
changeset
|
103 purple_certificate_copy(PurpleCertificate *crt) |
d6f902265076
- Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19014
diff
changeset
|
104 { |
d6f902265076
- Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19014
diff
changeset
|
105 g_return_val_if_fail(crt, NULL); |
d6f902265076
- Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19014
diff
changeset
|
106 g_return_val_if_fail(crt->scheme, NULL); |
d6f902265076
- Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19014
diff
changeset
|
107 g_return_val_if_fail(crt->scheme->copy_certificate, NULL); |
d6f902265076
- Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19014
diff
changeset
|
108 |
d6f902265076
- Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19014
diff
changeset
|
109 return (crt->scheme->copy_certificate)(crt); |
d6f902265076
- Add purple_certificate_copy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19014
diff
changeset
|
110 } |
18947
3c6bf77bf7c4
- Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18946
diff
changeset
|
111 |
19020
d69355001a6e
- Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19018
diff
changeset
|
112 GList * |
d69355001a6e
- Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19018
diff
changeset
|
113 purple_certificate_copy_list(GList *crt_list) |
d69355001a6e
- Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19018
diff
changeset
|
114 { |
d69355001a6e
- Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19018
diff
changeset
|
115 GList *new, *l; |
d69355001a6e
- Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19018
diff
changeset
|
116 |
d69355001a6e
- Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19018
diff
changeset
|
117 /* First, make a shallow copy of the list */ |
d69355001a6e
- Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19018
diff
changeset
|
118 new = g_list_copy(crt_list); |
d69355001a6e
- Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19018
diff
changeset
|
119 |
d69355001a6e
- Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19018
diff
changeset
|
120 /* Now go through and actually duplicate each certificate */ |
d69355001a6e
- Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19018
diff
changeset
|
121 for (l = new; l; l = l->next) { |
d69355001a6e
- Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19018
diff
changeset
|
122 l->data = purple_certificate_copy(l->data); |
d69355001a6e
- Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19018
diff
changeset
|
123 } |
d69355001a6e
- Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19018
diff
changeset
|
124 |
d69355001a6e
- Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19018
diff
changeset
|
125 return new; |
d69355001a6e
- Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19018
diff
changeset
|
126 } |
d69355001a6e
- Add purple_certificate_copy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19018
diff
changeset
|
127 |
18947
3c6bf77bf7c4
- Add purple_certificate_verify_destroy and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18946
diff
changeset
|
128 void |
18946
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
129 purple_certificate_destroy (PurpleCertificate *crt) |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
130 { |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
131 PurpleCertificateScheme *scheme; |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
132 |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
133 if (NULL == crt) return; |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
134 |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
135 scheme = crt->scheme; |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
136 |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
137 (scheme->destroy_certificate)(crt); |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
138 } |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
139 |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
140 void |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
141 purple_certificate_destroy_list (GList * crt_list) |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
142 { |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
143 PurpleCertificate *crt; |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
144 GList *l; |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
145 |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
146 for (l=crt_list; l; l = l->next) { |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
147 crt = (PurpleCertificate *) l->data; |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
148 purple_certificate_destroy(crt); |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
149 } |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
150 |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
151 g_list_free(crt_list); |
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
152 } |
18953
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
153 |
18988
4189fc3befba
- Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18987
diff
changeset
|
154 PurpleCertificate * |
18989
43d1ee6a3ed5
- Fixed naming issues in previous revision
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18988
diff
changeset
|
155 purple_certificate_import(PurpleCertificateScheme *scheme, const gchar *filename) |
18988
4189fc3befba
- Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18987
diff
changeset
|
156 { |
4189fc3befba
- Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18987
diff
changeset
|
157 g_return_val_if_fail(scheme, NULL); |
4189fc3befba
- Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18987
diff
changeset
|
158 g_return_val_if_fail(scheme->import_certificate, NULL); |
4189fc3befba
- Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18987
diff
changeset
|
159 g_return_val_if_fail(filename, NULL); |
4189fc3befba
- Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18987
diff
changeset
|
160 |
4189fc3befba
- Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18987
diff
changeset
|
161 return (scheme->import_certificate)(filename); |
4189fc3befba
- Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18987
diff
changeset
|
162 } |
4189fc3befba
- Add purple_certificate_import
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18987
diff
changeset
|
163 |
18977
31bdbb82de7e
- Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18976
diff
changeset
|
164 gboolean |
31bdbb82de7e
- Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18976
diff
changeset
|
165 purple_certificate_export(const gchar *filename, PurpleCertificate *crt) |
31bdbb82de7e
- Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18976
diff
changeset
|
166 { |
31bdbb82de7e
- Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18976
diff
changeset
|
167 PurpleCertificateScheme *scheme; |
31bdbb82de7e
- Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18976
diff
changeset
|
168 |
31bdbb82de7e
- Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18976
diff
changeset
|
169 g_return_val_if_fail(filename, FALSE); |
31bdbb82de7e
- Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18976
diff
changeset
|
170 g_return_val_if_fail(crt, FALSE); |
31bdbb82de7e
- Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18976
diff
changeset
|
171 g_return_val_if_fail(crt->scheme, FALSE); |
31bdbb82de7e
- Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18976
diff
changeset
|
172 |
31bdbb82de7e
- Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18976
diff
changeset
|
173 scheme = crt->scheme; |
31bdbb82de7e
- Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18976
diff
changeset
|
174 g_return_val_if_fail(scheme->export_certificate, FALSE); |
31bdbb82de7e
- Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18976
diff
changeset
|
175 |
31bdbb82de7e
- Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18976
diff
changeset
|
176 return (scheme->export_certificate)(filename, crt); |
31bdbb82de7e
- Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18976
diff
changeset
|
177 } |
31bdbb82de7e
- Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18976
diff
changeset
|
178 |
18953
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
179 GByteArray * |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
180 purple_certificate_get_fingerprint_sha1(PurpleCertificate *crt) |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
181 { |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
182 PurpleCertificateScheme *scheme; |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
183 GByteArray *fpr; |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
184 |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
185 g_return_val_if_fail(crt, NULL); |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
186 g_return_val_if_fail(crt->scheme, NULL); |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
187 |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
188 scheme = crt->scheme; |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
189 |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
190 g_return_val_if_fail(scheme->get_fingerprint_sha1, NULL); |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
191 |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
192 fpr = (scheme->get_fingerprint_sha1)(crt); |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
193 |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
194 return fpr; |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
195 } |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
196 |
18962
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
197 gchar * |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
198 purple_certificate_get_subject_name(PurpleCertificate *crt) |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
199 { |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
200 PurpleCertificateScheme *scheme; |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
201 gchar *subject_name; |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
202 |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
203 g_return_val_if_fail(crt, NULL); |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
204 g_return_val_if_fail(crt->scheme, NULL); |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
205 |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
206 scheme = crt->scheme; |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
207 |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
208 g_return_val_if_fail(scheme->get_subject_name, NULL); |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
209 |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
210 subject_name = (scheme->get_subject_name)(crt); |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
211 |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
212 return subject_name; |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
213 } |
fcd05c39803e
- Add purple_certificate_get_subject_name and associated libpurple
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18960
diff
changeset
|
214 |
19008
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
215 gboolean |
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
216 purple_certificate_check_subject_name(PurpleCertificate *crt, const gchar *name) |
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
217 { |
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
218 PurpleCertificateScheme *scheme; |
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
219 |
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
220 g_return_val_if_fail(crt, FALSE); |
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
221 g_return_val_if_fail(crt->scheme, FALSE); |
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
222 g_return_val_if_fail(name, FALSE); |
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
223 |
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
224 scheme = crt->scheme; |
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
225 |
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
226 /* TODO: Instead of failing, maybe use get_subject_name and strcmp? */ |
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
227 g_return_val_if_fail(scheme->check_subject_name, FALSE); |
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
228 |
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
229 return (scheme->check_subject_name)(crt, name); |
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
230 } |
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
231 |
19012
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
232 gboolean |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
233 purple_certificate_get_times(PurpleCertificate *crt, time_t *activation, time_t *expiration) |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
234 { |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
235 PurpleCertificateScheme *scheme; |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
236 |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
237 g_return_val_if_fail(crt, FALSE); |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
238 |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
239 scheme = crt->scheme; |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
240 |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
241 g_return_val_if_fail(scheme, FALSE); |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
242 |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
243 /* If both provided references are NULL, what are you doing calling |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
244 this? */ |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
245 g_return_val_if_fail( (activation != NULL) || (expiration != NULL), FALSE); |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
246 |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
247 /* Fulfill the caller's requests, if possible */ |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
248 if (activation) { |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
249 g_return_val_if_fail(scheme->get_activation, FALSE); |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
250 *activation = scheme->get_activation(crt); |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
251 } |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
252 if (expiration) { |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
253 g_return_val_if_fail(scheme->get_expiration, FALSE); |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
254 *expiration = scheme->get_expiration(crt); |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
255 } |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
256 |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
257 return TRUE; |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
258 } |
b1090cbfc286
- Add expiration/activation functions for Certificates
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19010
diff
changeset
|
259 |
19008
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
260 |
18984
2b4150624cf2
- Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18982
diff
changeset
|
261 gchar * |
2b4150624cf2
- Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18982
diff
changeset
|
262 purple_certificate_pool_mkpath(PurpleCertificatePool *pool, const gchar *id) |
2b4150624cf2
- Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18982
diff
changeset
|
263 { |
19010
0d4b84820390
- Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19009
diff
changeset
|
264 gchar *path; |
0d4b84820390
- Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19009
diff
changeset
|
265 gchar *esc_scheme_name, *esc_name, *esc_id; |
18984
2b4150624cf2
- Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18982
diff
changeset
|
266 |
2b4150624cf2
- Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18982
diff
changeset
|
267 g_return_val_if_fail(pool, NULL); |
2b4150624cf2
- Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18982
diff
changeset
|
268 g_return_val_if_fail(pool->scheme_name, NULL); |
2b4150624cf2
- Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18982
diff
changeset
|
269 g_return_val_if_fail(pool->name, NULL); |
2b4150624cf2
- Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18982
diff
changeset
|
270 |
19010
0d4b84820390
- Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19009
diff
changeset
|
271 /* Escape all the elements for filesystem-friendliness */ |
19033
6b4e874e47c1
- Handle NULLs given to certificate_pool_mkpath without causing errors
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19027
diff
changeset
|
272 esc_scheme_name = pool ? g_strdup(purple_escape_filename(pool->scheme_name)) : NULL; |
6b4e874e47c1
- Handle NULLs given to certificate_pool_mkpath without causing errors
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19027
diff
changeset
|
273 esc_name = pool ? g_strdup(purple_escape_filename(pool->name)) : NULL; |
6b4e874e47c1
- Handle NULLs given to certificate_pool_mkpath without causing errors
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19027
diff
changeset
|
274 esc_id = id ? g_strdup(purple_escape_filename(id)) : NULL; |
19010
0d4b84820390
- Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19009
diff
changeset
|
275 |
18984
2b4150624cf2
- Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18982
diff
changeset
|
276 path = g_build_filename(purple_user_dir(), |
18986
dfd9f883b774
- Correct the certstore folder paths
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18985
diff
changeset
|
277 "certificates", /* TODO: constantize this? */ |
19010
0d4b84820390
- Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19009
diff
changeset
|
278 esc_scheme_name, |
0d4b84820390
- Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19009
diff
changeset
|
279 esc_name, |
0d4b84820390
- Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19009
diff
changeset
|
280 esc_id, |
18984
2b4150624cf2
- Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18982
diff
changeset
|
281 NULL); |
19009
b64aa0222a7a
- pool_mkpath now runs purple_escape_filename on its return value
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19008
diff
changeset
|
282 |
19010
0d4b84820390
- Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19009
diff
changeset
|
283 g_free(esc_scheme_name); |
0d4b84820390
- Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19009
diff
changeset
|
284 g_free(esc_name); |
0d4b84820390
- Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19009
diff
changeset
|
285 g_free(esc_id); |
0d4b84820390
- Fix overzealous escaping cause by ancestor revision
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19009
diff
changeset
|
286 return path; |
18984
2b4150624cf2
- Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18982
diff
changeset
|
287 } |
2b4150624cf2
- Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18982
diff
changeset
|
288 |
18995
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
289 gboolean |
19034
8b627694bf4a
- Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19033
diff
changeset
|
290 purple_certificate_pool_usable(PurpleCertificatePool *pool) |
8b627694bf4a
- Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19033
diff
changeset
|
291 { |
8b627694bf4a
- Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19033
diff
changeset
|
292 g_return_val_if_fail(pool, FALSE); |
8b627694bf4a
- Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19033
diff
changeset
|
293 g_return_val_if_fail(pool->scheme_name, FALSE); |
8b627694bf4a
- Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19033
diff
changeset
|
294 |
8b627694bf4a
- Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19033
diff
changeset
|
295 /* Check that the pool's scheme is loaded */ |
8b627694bf4a
- Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19033
diff
changeset
|
296 if (purple_certificate_find_scheme(pool->scheme_name) == NULL) { |
8b627694bf4a
- Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19033
diff
changeset
|
297 return FALSE; |
8b627694bf4a
- Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19033
diff
changeset
|
298 } |
8b627694bf4a
- Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19033
diff
changeset
|
299 |
8b627694bf4a
- Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19033
diff
changeset
|
300 return TRUE; |
8b627694bf4a
- Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19033
diff
changeset
|
301 } |
8b627694bf4a
- Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19033
diff
changeset
|
302 |
8b627694bf4a
- Add purple_certificate_pool_usable to check whether a pool's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19033
diff
changeset
|
303 gboolean |
18995
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
304 purple_certificate_pool_contains(PurpleCertificatePool *pool, const gchar *id) |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
305 { |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
306 g_return_val_if_fail(pool, FALSE); |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
307 g_return_val_if_fail(id, FALSE); |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
308 g_return_val_if_fail(pool->cert_in_pool, FALSE); |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
309 |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
310 return (pool->cert_in_pool)(id); |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
311 } |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
312 |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
313 PurpleCertificate * |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
314 purple_certificate_pool_retrieve(PurpleCertificatePool *pool, const gchar *id) |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
315 { |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
316 g_return_val_if_fail(pool, NULL); |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
317 g_return_val_if_fail(id, NULL); |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
318 g_return_val_if_fail(pool->get_cert, NULL); |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
319 |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
320 return (pool->get_cert)(id); |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
321 } |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
322 |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
323 gboolean |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
324 purple_certificate_pool_store(PurpleCertificatePool *pool, const gchar *id, PurpleCertificate *crt) |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
325 { |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
326 g_return_val_if_fail(pool, FALSE); |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
327 g_return_val_if_fail(id, FALSE); |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
328 g_return_val_if_fail(pool->put_cert, FALSE); |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
329 |
18996
24fc5ca67afc
- Do some weak checking to ensure that you don't attempt to store a
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18995
diff
changeset
|
330 /* TODO: Should this just be someone else's problem? */ |
24fc5ca67afc
- Do some weak checking to ensure that you don't attempt to store a
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18995
diff
changeset
|
331 /* Whether crt->scheme matches find_scheme(pool->scheme_name) is not |
24fc5ca67afc
- Do some weak checking to ensure that you don't attempt to store a
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18995
diff
changeset
|
332 relevant... I think... */ |
24fc5ca67afc
- Do some weak checking to ensure that you don't attempt to store a
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18995
diff
changeset
|
333 g_return_val_if_fail( |
24fc5ca67afc
- Do some weak checking to ensure that you don't attempt to store a
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18995
diff
changeset
|
334 g_ascii_strcasecmp(pool->scheme_name, crt->scheme->name) == 0, |
24fc5ca67afc
- Do some weak checking to ensure that you don't attempt to store a
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18995
diff
changeset
|
335 FALSE); |
18995
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
336 |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
337 return (pool->put_cert)(id, crt); |
47b06daea9d1
- Add pool retrieve, contains, and store functions to certificate API
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18993
diff
changeset
|
338 } |
18984
2b4150624cf2
- Add purple_certificate_pool_mkpath helper function
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18982
diff
changeset
|
339 |
19026
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
340 GList * |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
341 purple_certificate_pool_get_idlist(PurpleCertificatePool *pool) |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
342 { |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
343 g_return_val_if_fail(pool, NULL); |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
344 g_return_val_if_fail(pool->get_idlist, NULL); |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
345 |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
346 return (pool->get_idlist)(); |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
347 } |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
348 |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
349 void |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
350 purple_certificate_pool_destroy_idlist(GList *idlist) |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
351 { |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
352 GList *l; |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
353 |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
354 /* Iterate through and free them strings */ |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
355 for ( l = idlist; l; l = l->next ) { |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
356 g_free(l->data); |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
357 } |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
358 |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
359 g_list_free(idlist); |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
360 } |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
361 |
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
362 |
18953
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
363 /****************************************************************************/ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
364 /* Builtin Verifiers, Pools, etc. */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
365 /****************************************************************************/ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
366 |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
367 static void |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
368 x509_singleuse_verify_cb (PurpleCertificateVerificationRequest *vrq, gint id) |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
369 { |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
370 g_return_if_fail(vrq); |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
371 |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
372 purple_debug_info("certificate/x509_singleuse", |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
373 "VRQ on cert from %s gave %d\n", |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
374 vrq->subject_name, id); |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
375 |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
376 /* Signal what happened back to the caller */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
377 if (1 == id) { |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
378 /* Accepted! */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
379 (vrq->cb)(PURPLE_CERTIFICATE_VALID, vrq->cb_data); |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
380 } else { |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
381 /* Not accepted */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
382 (vrq->cb)(PURPLE_CERTIFICATE_INVALID, vrq->cb_data); |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
383 } |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
384 |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
385 /* Now clean up the request */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
386 purple_certificate_verify_destroy(vrq); |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
387 } |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
388 |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
389 static void |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
390 x509_singleuse_start_verify (PurpleCertificateVerificationRequest *vrq) |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
391 { |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
392 gchar *sha_asc; |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
393 GByteArray *sha_bin; |
18964
7b03727b10b4
- x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18962
diff
changeset
|
394 gchar *cn; |
7b03727b10b4
- x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18962
diff
changeset
|
395 const gchar *cn_match; |
18953
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
396 gchar *primary, *secondary; |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
397 PurpleCertificate *crt = (PurpleCertificate *) vrq->cert_chain->data; |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
398 |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
399 /* Pull out the SHA1 checksum */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
400 sha_bin = purple_certificate_get_fingerprint_sha1(crt); |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
401 /* Now decode it for display */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
402 sha_asc = purple_base16_encode_chunked(sha_bin->data, |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
403 sha_bin->len); |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
404 |
18964
7b03727b10b4
- x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18962
diff
changeset
|
405 /* Get the cert Common Name */ |
7b03727b10b4
- x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18962
diff
changeset
|
406 cn = purple_certificate_get_subject_name(crt); |
7b03727b10b4
- x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18962
diff
changeset
|
407 |
7b03727b10b4
- x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18962
diff
changeset
|
408 /* Determine whether the name matches */ |
7b03727b10b4
- x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18962
diff
changeset
|
409 /* TODO: Worry about strcmp safety? */ |
7b03727b10b4
- x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18962
diff
changeset
|
410 if (!strcmp(cn, vrq->subject_name)) { |
7b03727b10b4
- x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18962
diff
changeset
|
411 cn_match = _(""); |
7b03727b10b4
- x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18962
diff
changeset
|
412 } else { |
7b03727b10b4
- x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18962
diff
changeset
|
413 cn_match = _("(DOES NOT MATCH)"); |
7b03727b10b4
- x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18962
diff
changeset
|
414 } |
7b03727b10b4
- x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18962
diff
changeset
|
415 |
18953
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
416 /* Make messages */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
417 primary = g_strdup_printf(_("%s has presented the following certificate for just-this-once use:"), vrq->subject_name); |
18964
7b03727b10b4
- x509_singleuse uses the subject_name field...somewhat
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18962
diff
changeset
|
418 secondary = g_strdup_printf(_("Common name: %s %s\nFingerprint (SHA1): %s"), cn, cn_match, sha_asc); |
18953
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
419 |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
420 /* Make a semi-pretty display */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
421 purple_request_accept_cancel( |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
422 vrq->cb_data, /* TODO: Find what the handle ought to be */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
423 _("Single-use Certificate Verification"), |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
424 primary, |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
425 secondary, |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
426 1, /* Accept by default */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
427 NULL, /* No account */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
428 NULL, /* No other user */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
429 NULL, /* No associated conversation */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
430 vrq, |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
431 x509_singleuse_verify_cb, |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
432 x509_singleuse_verify_cb ); |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
433 |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
434 /* Cleanup */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
435 g_free(primary); |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
436 g_free(secondary); |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
437 g_free(sha_asc); |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
438 g_byte_array_free(sha_bin, TRUE); |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
439 } |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
440 |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
441 static void |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
442 x509_singleuse_destroy_request (PurpleCertificateVerificationRequest *vrq) |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
443 { |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
444 /* I don't do anything! */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
445 } |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
446 |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
447 PurpleCertificateVerifier x509_singleuse = { |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
448 "x509", /* Scheme name */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
449 "singleuse", /* Verifier name */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
450 x509_singleuse_start_verify, /* start_verification function */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
451 x509_singleuse_destroy_request /* Request cleanup operation */ |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
452 }; |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
453 |
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
454 |
18975
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
455 |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
456 |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
457 static PurpleCertificatePool x509_tls_peers; |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
458 |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
459 static gboolean |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
460 x509_tls_peers_init(void) |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
461 { |
18985
806c610ac5a0
- Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18984
diff
changeset
|
462 gchar *poolpath; |
806c610ac5a0
- Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18984
diff
changeset
|
463 int ret; |
806c610ac5a0
- Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18984
diff
changeset
|
464 |
806c610ac5a0
- Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18984
diff
changeset
|
465 /* Set up key cache here if it isn't already done */ |
806c610ac5a0
- Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18984
diff
changeset
|
466 poolpath = purple_certificate_pool_mkpath(&x509_tls_peers, NULL); |
806c610ac5a0
- Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18984
diff
changeset
|
467 ret = purple_build_dir(poolpath, 0700); /* Make it this user only */ |
18975
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
468 |
18985
806c610ac5a0
- Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18984
diff
changeset
|
469 g_free(poolpath); |
806c610ac5a0
- Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18984
diff
changeset
|
470 |
806c610ac5a0
- Add init for x509_tls_peers pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18984
diff
changeset
|
471 g_return_val_if_fail(ret == 0, FALSE); |
18975
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
472 return TRUE; |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
473 } |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
474 |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
475 static gboolean |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
476 x509_tls_peers_cert_in_pool(const gchar *id) |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
477 { |
18987
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
478 gchar *keypath; |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
479 gboolean ret = FALSE; |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
480 |
18975
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
481 g_return_val_if_fail(id, FALSE); |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
482 |
18987
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
483 keypath = purple_certificate_pool_mkpath(&x509_tls_peers, id); |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
484 |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
485 ret = g_file_test(keypath, G_FILE_TEST_IS_REGULAR); |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
486 |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
487 g_free(keypath); |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
488 return ret; |
18975
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
489 } |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
490 |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
491 static PurpleCertificate * |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
492 x509_tls_peers_get_cert(const gchar *id) |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
493 { |
18987
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
494 PurpleCertificateScheme *x509; |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
495 PurpleCertificate *crt; |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
496 gchar *keypath; |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
497 |
18975
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
498 g_return_val_if_fail(id, NULL); |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
499 |
18987
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
500 /* Is it in the pool? */ |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
501 if ( !x509_tls_peers_cert_in_pool(id) ) { |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
502 return NULL; |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
503 } |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
504 |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
505 /* Look up the X.509 scheme */ |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
506 x509 = purple_certificate_find_scheme("x509"); |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
507 g_return_val_if_fail(x509, NULL); |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
508 |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
509 /* Okay, now find and load that key */ |
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
510 keypath = purple_certificate_pool_mkpath(&x509_tls_peers, id); |
18990
3f2944bdb404
- Finish tls_peers get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18989
diff
changeset
|
511 crt = purple_certificate_import(x509, keypath); |
18987
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
512 |
18990
3f2944bdb404
- Finish tls_peers get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18989
diff
changeset
|
513 g_free(keypath); |
18987
a763dd083b79
- Finished tls_peers cert_in_pool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18986
diff
changeset
|
514 |
18990
3f2944bdb404
- Finish tls_peers get_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18989
diff
changeset
|
515 return crt; |
18975
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
516 } |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
517 |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
518 static gboolean |
18982
8948cd6bb8bc
- CertificatePool put_cert now accepts an id argument
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18977
diff
changeset
|
519 x509_tls_peers_put_cert(const gchar *id, PurpleCertificate *crt) |
18975
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
520 { |
18991
7a144f2229c6
- Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18990
diff
changeset
|
521 gboolean ret = FALSE; |
7a144f2229c6
- Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18990
diff
changeset
|
522 gchar *keypath; |
18975
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
523 |
18991
7a144f2229c6
- Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18990
diff
changeset
|
524 g_return_val_if_fail(crt, FALSE); |
7a144f2229c6
- Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18990
diff
changeset
|
525 g_return_val_if_fail(crt->scheme, FALSE); |
7a144f2229c6
- Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18990
diff
changeset
|
526 /* Make sure that this is some kind of X.509 certificate */ |
18992
605e69fa7108
- Comment change
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18991
diff
changeset
|
527 /* TODO: Perhaps just check crt->scheme->name instead? */ |
18991
7a144f2229c6
- Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18990
diff
changeset
|
528 g_return_val_if_fail(crt->scheme == purple_certificate_find_scheme(x509_tls_peers.scheme_name), FALSE); |
7a144f2229c6
- Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18990
diff
changeset
|
529 |
7a144f2229c6
- Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18990
diff
changeset
|
530 /* Work out the filename and export */ |
7a144f2229c6
- Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18990
diff
changeset
|
531 keypath = purple_certificate_pool_mkpath(&x509_tls_peers, id); |
7a144f2229c6
- Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18990
diff
changeset
|
532 ret = purple_certificate_export(keypath, crt); |
7a144f2229c6
- Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18990
diff
changeset
|
533 |
7a144f2229c6
- Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18990
diff
changeset
|
534 g_free(keypath); |
7a144f2229c6
- Add tls_peers put_cert
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18990
diff
changeset
|
535 return ret; |
18975
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
536 } |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
537 |
19027
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
538 static GList * |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
539 x509_tls_peers_get_idlist(void) |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
540 { |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
541 GList *idlist = NULL; |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
542 GDir *dir; |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
543 const gchar *entry; |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
544 gchar *poolpath; |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
545 |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
546 /* Get a handle on the pool directory */ |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
547 poolpath = purple_certificate_pool_mkpath(&x509_tls_peers, NULL); |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
548 dir = g_dir_open(poolpath, |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
549 0, /* No flags */ |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
550 NULL); /* Not interested in what the error is */ |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
551 g_free(poolpath); |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
552 |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
553 g_return_val_if_fail(dir, NULL); |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
554 |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
555 /* Traverse the directory listing and create an idlist */ |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
556 while ( (entry = g_dir_read_name(dir)) != NULL ) { |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
557 /* Copy the entry name into our list (GLib owns the original |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
558 string) */ |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
559 idlist = g_list_prepend(idlist, g_strdup(entry)); |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
560 } |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
561 |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
562 /* Release the directory */ |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
563 g_dir_close(dir); |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
564 |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
565 return idlist; |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
566 } |
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
567 |
18975
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
568 static PurpleCertificatePool x509_tls_peers = { |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
569 "x509", /* Scheme name */ |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
570 "tls_peers", /* Pool name */ |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
571 N_("SSL Peers Cache"), /* User-friendly name */ |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
572 NULL, /* Internal data */ |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
573 x509_tls_peers_init, /* init */ |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
574 NULL, /* uninit not required */ |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
575 x509_tls_peers_cert_in_pool, /* Certificate exists? */ |
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
576 x509_tls_peers_get_cert, /* Cert retriever */ |
19026
b3acaf46d9ad
- Add pool_get_idlist / pool_destroy_idlist
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19024
diff
changeset
|
577 x509_tls_peers_put_cert, /* Cert writer */ |
19027
15d9031e03b2
- Add get_idlist support to tls_peers CertificatePool
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19026
diff
changeset
|
578 x509_tls_peers_get_idlist /* idlist retriever */ |
18975
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
579 }; |
18993
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
580 |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
581 |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
582 |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
583 static PurpleCertificateVerifier x509_tls_cached; |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
584 |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
585 static void |
19001
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
586 x509_tls_cached_unknown_peer_cb (PurpleCertificateVerificationRequest *vrq, gint id) |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
587 { |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
588 PurpleCertificatePool *tls_peers; |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
589 |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
590 g_return_if_fail(vrq); |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
591 |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
592 tls_peers = purple_certificate_find_pool("x509","tls_peers"); |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
593 |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
594 if (1 == id) { |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
595 gchar *cache_id = vrq->subject_name; |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
596 purple_debug_info("certificate/x509/tls_cached", |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
597 "User ACCEPTED cert\nCaching first in chain for future use as %s...\n", |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
598 cache_id); |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
599 |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
600 purple_certificate_pool_store(tls_peers, cache_id, |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
601 vrq->cert_chain->data); |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
602 |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
603 (vrq->cb)(PURPLE_CERTIFICATE_VALID, vrq->cb_data); |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
604 } else { |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
605 purple_debug_info("certificate/x509/tls_cached", |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
606 "User REJECTED cert\n"); |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
607 (vrq->cb)(PURPLE_CERTIFICATE_INVALID, vrq->cb_data); |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
608 } |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
609 |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
610 /* Finish off the request */ |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
611 purple_certificate_verify_destroy(vrq); |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
612 } |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
613 |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
614 static void |
19000
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
615 x509_tls_cached_unknown_peer(PurpleCertificateVerificationRequest *vrq) |
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
616 { |
19001
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
617 gchar *sha_asc; |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
618 GByteArray *sha_bin; |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
619 gchar *cn; |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
620 const gchar *cn_match; |
19014
bc4d0ebeabd3
- Add expiration/activation time display to tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19012
diff
changeset
|
621 time_t activation, expiration; |
bc4d0ebeabd3
- Add expiration/activation time display to tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19012
diff
changeset
|
622 /* Length of these buffers is dictated by 'man ctime_r' */ |
bc4d0ebeabd3
- Add expiration/activation time display to tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19012
diff
changeset
|
623 gchar activ_str[26], expir_str[26]; |
19001
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
624 gchar *primary, *secondary; |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
625 PurpleCertificate *crt = (PurpleCertificate *) vrq->cert_chain->data; |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
626 |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
627 /* Pull out the SHA1 checksum */ |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
628 sha_bin = purple_certificate_get_fingerprint_sha1(crt); |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
629 /* Now decode it for display */ |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
630 sha_asc = purple_base16_encode_chunked(sha_bin->data, |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
631 sha_bin->len); |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
632 |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
633 /* Get the cert Common Name */ |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
634 cn = purple_certificate_get_subject_name(crt); |
19000
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
635 |
19001
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
636 /* Determine whether the name matches */ |
19008
7fd9bd55f8d0
- Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19001
diff
changeset
|
637 if (purple_certificate_check_subject_name(crt, vrq->subject_name)) { |
19001
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
638 cn_match = _(""); |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
639 } else { |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
640 cn_match = _("(DOES NOT MATCH)"); |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
641 } |
19014
bc4d0ebeabd3
- Add expiration/activation time display to tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19012
diff
changeset
|
642 |
bc4d0ebeabd3
- Add expiration/activation time display to tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19012
diff
changeset
|
643 /* Get the certificate times */ |
bc4d0ebeabd3
- Add expiration/activation time display to tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19012
diff
changeset
|
644 /* TODO: Check the times against localtime */ |
bc4d0ebeabd3
- Add expiration/activation time display to tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19012
diff
changeset
|
645 /* TODO: errorcheck? */ |
bc4d0ebeabd3
- Add expiration/activation time display to tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19012
diff
changeset
|
646 g_assert(purple_certificate_get_times(crt, &activation, &expiration)); |
bc4d0ebeabd3
- Add expiration/activation time display to tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19012
diff
changeset
|
647 ctime_r(&activation, activ_str); |
bc4d0ebeabd3
- Add expiration/activation time display to tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19012
diff
changeset
|
648 ctime_r(&expiration, expir_str); |
19001
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
649 |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
650 /* Make messages */ |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
651 primary = g_strdup_printf(_("%s has presented the following certificate:"), vrq->subject_name); |
19014
bc4d0ebeabd3
- Add expiration/activation time display to tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19012
diff
changeset
|
652 secondary = g_strdup_printf(_("Common name: %s %s\n\nFingerprint (SHA1): %s\n\nActivation date: %s\nExpiration date: %s\n"), cn, cn_match, sha_asc, activ_str, expir_str); |
19001
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
653 |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
654 /* Make a semi-pretty display */ |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
655 purple_request_accept_cancel( |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
656 vrq->cb_data, /* TODO: Find what the handle ought to be */ |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
657 _("SSL Certificate Verification"), |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
658 primary, |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
659 secondary, |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
660 1, /* Accept by default */ |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
661 NULL, /* No account */ |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
662 NULL, /* No other user */ |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
663 NULL, /* No associated conversation */ |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
664 vrq, |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
665 x509_tls_cached_unknown_peer_cb, |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
666 x509_tls_cached_unknown_peer_cb ); |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
667 |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
668 /* Cleanup */ |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
669 g_free(primary); |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
670 g_free(secondary); |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
671 g_free(sha_asc); |
b207701cb5a3
- Wrote the logic for the "previously unknown host" condition in
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19000
diff
changeset
|
672 g_byte_array_free(sha_bin, TRUE); |
19000
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
673 } |
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
674 |
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
675 static void |
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
676 x509_tls_cached_peer_cert_changed(PurpleCertificateVerificationRequest *vrq) |
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
677 { |
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
678 /* TODO: Prompt the user, etc. */ |
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
679 |
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
680 (vrq->cb)(PURPLE_CERTIFICATE_INVALID, vrq->cb_data); |
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
681 /* Okay, we're done here */ |
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
682 purple_certificate_verify_destroy(vrq); |
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
683 return; |
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
684 } |
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
685 |
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
686 static void |
18993
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
687 x509_tls_cached_start_verify(PurpleCertificateVerificationRequest *vrq) |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
688 { |
18999
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
689 PurpleCertificate *peer_crt = (PurpleCertificate *) vrq->cert_chain->data; |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
690 const gchar *tls_peers_name = "tls_peers"; /* Name of local cache */ |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
691 PurpleCertificatePool *tls_peers; |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
692 |
18993
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
693 g_return_if_fail(vrq); |
18999
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
694 |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
695 purple_debug_info("certificate/x509/tls_cached", |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
696 "Starting verify for %s\n", |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
697 vrq->subject_name); |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
698 |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
699 tls_peers = purple_certificate_find_pool(x509_tls_cached.scheme_name,tls_peers_name); |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
700 |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
701 /* TODO: This should probably just prompt the user instead of throwing |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
702 an angry fit */ |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
703 if (!tls_peers) { |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
704 purple_debug_error("certificate/x509/tls_cached", |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
705 "Couldn't find local peers cache %s\nReturning INVALID to callback\n", |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
706 tls_peers_name); |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
707 (vrq->cb)(PURPLE_CERTIFICATE_INVALID, vrq->cb_data); |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
708 purple_certificate_verify_destroy(vrq); |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
709 return; |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
710 } |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
711 |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
712 /* Check if the peer has a certificate cached already */ |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
713 purple_debug_info("certificate/x509/tls_cached", |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
714 "Checking for cached cert...\n"); |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
715 if (purple_certificate_pool_contains(tls_peers, vrq->subject_name)) { |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
716 PurpleCertificate *cached_crt; |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
717 GByteArray *peer_fpr, *cached_fpr; |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
718 |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
719 purple_debug_info("certificate/x509/tls_cached", |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
720 "...Found cached cert\n"); |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
721 |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
722 /* Load up the cached certificate */ |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
723 cached_crt = purple_certificate_pool_retrieve( |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
724 tls_peers, vrq->subject_name); |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
725 |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
726 /* Now get SHA1 sums for both and compare them */ |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
727 /* TODO: This is not an elegant way to compare certs */ |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
728 peer_fpr = purple_certificate_get_fingerprint_sha1(peer_crt); |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
729 cached_fpr = purple_certificate_get_fingerprint_sha1(cached_crt); |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
730 if (!memcmp(peer_fpr->data, cached_fpr->data, peer_fpr->len)) { |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
731 purple_debug_info("certificate/x509/tls_cached", |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
732 "Peer cert matched cached\n"); |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
733 (vrq->cb)(PURPLE_CERTIFICATE_VALID, vrq->cb_data); |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
734 |
19000
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
735 /* vrq is now finished */ |
18999
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
736 purple_certificate_verify_destroy(vrq); |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
737 } else { |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
738 purple_debug_info("certificate/x509/tls_cached", |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
739 "Peer cert did NOT match cached\n"); |
19000
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
740 /* vrq now becomes the problem of cert_changed */ |
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
741 x509_tls_cached_peer_cert_changed(vrq); |
18999
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
742 } |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
743 |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
744 purple_certificate_destroy(cached_crt); |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
745 g_byte_array_free(peer_fpr, TRUE); |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
746 g_byte_array_free(cached_fpr, TRUE); |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
747 } else { |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
748 /* TODO: Prompt the user, etc. */ |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
749 purple_debug_info("certificate/x509/tls_cached", |
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
750 "...Not in cache\n"); |
19000
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
751 /* vrq now becomes the problem of unknown_peer */ |
986413850713
- More skeletonizing for tls_cached logic.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18999
diff
changeset
|
752 x509_tls_cached_unknown_peer(vrq); |
18999
7fbd0a6ac8d6
- Made a logic skeleton for tls_cached verifier
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18996
diff
changeset
|
753 } |
18993
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
754 } |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
755 |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
756 static void |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
757 x509_tls_cached_destroy_request(PurpleCertificateVerificationRequest *vrq) |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
758 { |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
759 g_return_if_fail(vrq); |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
760 } |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
761 |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
762 static PurpleCertificateVerifier x509_tls_cached = { |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
763 "x509", /* Scheme name */ |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
764 "tls_cached", /* Verifier name */ |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
765 x509_tls_cached_start_verify, /* Verification begin */ |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
766 x509_tls_cached_destroy_request /* Request cleanup */ |
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
767 }; |
18975
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
768 |
18950
f78a9efa9eaf
- Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18949
diff
changeset
|
769 /****************************************************************************/ |
f78a9efa9eaf
- Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18949
diff
changeset
|
770 /* Subsystem */ |
f78a9efa9eaf
- Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18949
diff
changeset
|
771 /****************************************************************************/ |
f78a9efa9eaf
- Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18949
diff
changeset
|
772 void |
18957
9205841eed06
- Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18953
diff
changeset
|
773 purple_certificate_init(void) |
18950
f78a9efa9eaf
- Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18949
diff
changeset
|
774 { |
18957
9205841eed06
- Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18953
diff
changeset
|
775 /* Register builtins */ |
18953
89b32569890c
- Add purple_certificate_get_fingerprint_sha1
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18952
diff
changeset
|
776 purple_certificate_register_verifier(&x509_singleuse); |
18975
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
777 purple_certificate_register_pool(&x509_tls_peers); |
18993
33fb4930ad2b
- Add x509_tls_cached skeleton
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18992
diff
changeset
|
778 purple_certificate_register_verifier(&x509_tls_cached); |
18950
f78a9efa9eaf
- Add purple_certificate_register_builtins
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18949
diff
changeset
|
779 } |
18946
617447a71ab7
- Add certificate_destroy and certificate_destroy_list
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18943
diff
changeset
|
780 |
18957
9205841eed06
- Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18953
diff
changeset
|
781 void |
9205841eed06
- Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18953
diff
changeset
|
782 purple_certificate_uninit(void) |
9205841eed06
- Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18953
diff
changeset
|
783 { |
19024
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
784 GList *full_list, *l; |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
785 |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
786 /* Unregister all Schemes */ |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
787 full_list = g_list_copy(cert_schemes); /* Make a working copy */ |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
788 for (l = full_list; l; l = l->next) { |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
789 purple_certificate_unregister_scheme( |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
790 (PurpleCertificateScheme *) l->data ); |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
791 } |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
792 g_list_free(full_list); |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
793 |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
794 /* Unregister all Verifiers */ |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
795 full_list = g_list_copy(cert_verifiers); /* Make a working copy */ |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
796 for (l = full_list; l; l = l->next) { |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
797 purple_certificate_unregister_verifier( |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
798 (PurpleCertificateVerifier *) l->data ); |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
799 } |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
800 g_list_free(full_list); |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
801 |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
802 /* Unregister all Pools */ |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
803 full_list = g_list_copy(cert_pools); /* Make a working copy */ |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
804 for (l = full_list; l; l = l->next) { |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
805 purple_certificate_unregister_pool( |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
806 (PurpleCertificatePool *) l->data ); |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
807 } |
264f00bc8f22
- Change certificate_uninit to unregister all Pools, Schemes, and
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19023
diff
changeset
|
808 g_list_free(full_list); |
18957
9205841eed06
- Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18953
diff
changeset
|
809 } |
9205841eed06
- Certificate system now has init and uninit like other systems
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18953
diff
changeset
|
810 |
19022
1f07f96dc1ce
- Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19021
diff
changeset
|
811 gpointer |
1f07f96dc1ce
- Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19021
diff
changeset
|
812 purple_certificate_get_handle(void) |
1f07f96dc1ce
- Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19021
diff
changeset
|
813 { |
1f07f96dc1ce
- Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19021
diff
changeset
|
814 static gint handle; |
1f07f96dc1ce
- Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19021
diff
changeset
|
815 return &handle; |
1f07f96dc1ce
- Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19021
diff
changeset
|
816 } |
1f07f96dc1ce
- Add purple_certificate_get_handle
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19021
diff
changeset
|
817 |
18192
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
818 PurpleCertificateScheme * |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
819 purple_certificate_find_scheme(const gchar *name) |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
820 { |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
821 PurpleCertificateScheme *scheme = NULL; |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
822 GList *l; |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
823 |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
824 g_return_val_if_fail(name, NULL); |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
825 |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
826 /* Traverse the list of registered schemes and locate the |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
827 one whose name matches */ |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
828 for(l = cert_schemes; l; l = l->next) { |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
829 scheme = (PurpleCertificateScheme *)(l->data); |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
830 |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
831 /* Name matches? that's our man */ |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
832 if(!g_ascii_strcasecmp(scheme->name, name)) |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
833 return scheme; |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
834 } |
17638
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
835 |
18192
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
836 purple_debug_warning("certificate", |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
837 "CertificateScheme %s requested but not found.\n", |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
838 name); |
17638
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
839 |
18192
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
840 /* TODO: Signalling and such? */ |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
841 |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
842 return NULL; |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
843 } |
17638
668a294f9a72
- Added certificate.[ch] and got them integrated into the build
William Ehlhardt <williamehlhardt@gmail.com>
parents:
diff
changeset
|
844 |
19023
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
845 GList * |
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
846 purple_certificate_get_schemes(void) |
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
847 { |
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
848 return cert_schemes; |
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
849 } |
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
850 |
18192
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
851 gboolean |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
852 purple_certificate_register_scheme(PurpleCertificateScheme *scheme) |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
853 { |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
854 g_return_val_if_fail(scheme != NULL, FALSE); |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
855 |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
856 /* Make sure no scheme is registered with the same name */ |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
857 if (purple_certificate_find_scheme(scheme->name) != NULL) { |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
858 return FALSE; |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
859 } |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
860 |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
861 /* Okay, we're golden. Register it. */ |
18972
486563a6bb5c
- prepend > append
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18971
diff
changeset
|
862 cert_schemes = g_list_prepend(cert_schemes, scheme); |
18192
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
863 |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
864 /* TODO: Signalling and such? */ |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
865 return TRUE; |
dc7e7b8bdc8c
- Add chunks of the certificate scheme registration interface
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17641
diff
changeset
|
866 } |
18926
8c4d52bc0319
- Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18192
diff
changeset
|
867 |
8c4d52bc0319
- Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18192
diff
changeset
|
868 gboolean |
8c4d52bc0319
- Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18192
diff
changeset
|
869 purple_certificate_unregister_scheme(PurpleCertificateScheme *scheme) |
8c4d52bc0319
- Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18192
diff
changeset
|
870 { |
8c4d52bc0319
- Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18192
diff
changeset
|
871 if (NULL == scheme) { |
8c4d52bc0319
- Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18192
diff
changeset
|
872 purple_debug_warning("certificate", |
18973
28673b6fb8a2
- Fix some errors and return values
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18972
diff
changeset
|
873 "Attempting to unregister NULL scheme\n"); |
28673b6fb8a2
- Fix some errors and return values
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18972
diff
changeset
|
874 return FALSE; |
18926
8c4d52bc0319
- Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18192
diff
changeset
|
875 } |
8c4d52bc0319
- Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18192
diff
changeset
|
876 |
8c4d52bc0319
- Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18192
diff
changeset
|
877 /* TODO: signalling? */ |
8c4d52bc0319
- Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18192
diff
changeset
|
878 |
18941
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
879 /* TODO: unregister all CertificateVerifiers for this scheme?*/ |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
880 /* TODO: unregister all CertificatePools for this scheme? */ |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
881 /* Neither of the above should be necessary, though */ |
18926
8c4d52bc0319
- Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18192
diff
changeset
|
882 cert_schemes = g_list_remove(cert_schemes, scheme); |
8c4d52bc0319
- Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18192
diff
changeset
|
883 |
8c4d52bc0319
- Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18192
diff
changeset
|
884 return TRUE; |
8c4d52bc0319
- Add unregister_scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18192
diff
changeset
|
885 } |
18941
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
886 |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
887 PurpleCertificateVerifier * |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
888 purple_certificate_find_verifier(const gchar *scheme_name, const gchar *ver_name) |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
889 { |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
890 PurpleCertificateVerifier *vr = NULL; |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
891 GList *l; |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
892 |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
893 g_return_val_if_fail(scheme_name, NULL); |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
894 g_return_val_if_fail(ver_name, NULL); |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
895 |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
896 /* Traverse the list of registered verifiers and locate the |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
897 one whose name matches */ |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
898 for(l = cert_verifiers; l; l = l->next) { |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
899 vr = (PurpleCertificateVerifier *)(l->data); |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
900 |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
901 /* Scheme and name match? */ |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
902 if(!g_ascii_strcasecmp(vr->scheme_name, scheme_name) && |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
903 !g_ascii_strcasecmp(vr->name, ver_name)) |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
904 return vr; |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
905 } |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
906 |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
907 purple_debug_warning("certificate", |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
908 "CertificateVerifier %s, %s requested but not found.\n", |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
909 scheme_name, ver_name); |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
910 |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
911 /* TODO: Signalling and such? */ |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
912 |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
913 return NULL; |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
914 } |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
915 |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
916 |
19023
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
917 GList * |
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
918 purple_certificate_get_verifiers(void) |
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
919 { |
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
920 return cert_verifiers; |
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
921 } |
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
922 |
18941
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
923 gboolean |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
924 purple_certificate_register_verifier(PurpleCertificateVerifier *vr) |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
925 { |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
926 g_return_val_if_fail(vr != NULL, FALSE); |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
927 |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
928 /* Make sure no verifier is registered with the same scheme/name */ |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
929 if (purple_certificate_find_verifier(vr->scheme_name, vr->name) != NULL) { |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
930 return FALSE; |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
931 } |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
932 |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
933 /* Okay, we're golden. Register it. */ |
18972
486563a6bb5c
- prepend > append
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18971
diff
changeset
|
934 cert_verifiers = g_list_prepend(cert_verifiers, vr); |
18941
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
935 |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
936 /* TODO: Signalling and such? */ |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
937 return TRUE; |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
938 } |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
939 |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
940 gboolean |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
941 purple_certificate_unregister_verifier(PurpleCertificateVerifier *vr) |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
942 { |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
943 if (NULL == vr) { |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
944 purple_debug_warning("certificate", |
18973
28673b6fb8a2
- Fix some errors and return values
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18972
diff
changeset
|
945 "Attempting to unregister NULL verifier\n"); |
28673b6fb8a2
- Fix some errors and return values
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18972
diff
changeset
|
946 return FALSE; |
18941
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
947 } |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
948 |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
949 /* TODO: signalling? */ |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
950 |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
951 cert_verifiers = g_list_remove(cert_verifiers, vr); |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
952 |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
953 return TRUE; |
425f494bd1ec
- CertificateVerifier register/unregister/find
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18926
diff
changeset
|
954 } |
18971
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
955 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
956 PurpleCertificatePool * |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
957 purple_certificate_find_pool(const gchar *scheme_name, const gchar *pool_name) |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
958 { |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
959 PurpleCertificatePool *pool = NULL; |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
960 GList *l; |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
961 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
962 g_return_val_if_fail(scheme_name, NULL); |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
963 g_return_val_if_fail(pool_name, NULL); |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
964 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
965 /* Traverse the list of registered pools and locate the |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
966 one whose name matches */ |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
967 for(l = cert_pools; l; l = l->next) { |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
968 pool = (PurpleCertificatePool *)(l->data); |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
969 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
970 /* Scheme and name match? */ |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
971 if(!g_ascii_strcasecmp(pool->scheme_name, scheme_name) && |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
972 !g_ascii_strcasecmp(pool->name, pool_name)) |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
973 return pool; |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
974 } |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
975 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
976 purple_debug_warning("certificate", |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
977 "CertificatePool %s, %s requested but not found.\n", |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
978 scheme_name, pool_name); |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
979 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
980 /* TODO: Signalling and such? */ |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
981 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
982 return NULL; |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
983 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
984 } |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
985 |
19023
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
986 GList * |
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
987 purple_certificate_get_pools(void) |
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
988 { |
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
989 return cert_pools; |
eb86ff3ba21a
- Add get_pools, get_verifiers, and get_schemes
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19022
diff
changeset
|
990 } |
18971
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
991 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
992 gboolean |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
993 purple_certificate_register_pool(PurpleCertificatePool *pool) |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
994 { |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
995 gboolean success = FALSE; |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
996 g_return_val_if_fail(pool, FALSE); |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
997 g_return_val_if_fail(pool->scheme_name, FALSE); |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
998 g_return_val_if_fail(pool->name, FALSE); |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
999 g_return_val_if_fail(pool->fullname, FALSE); |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1000 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1001 /* Make sure no pools are registered under this name */ |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1002 if (purple_certificate_find_pool(pool->scheme_name, pool->name)) { |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1003 return FALSE; |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1004 } |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1005 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1006 /* Initialize the pool if needed */ |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1007 if (pool->init) { |
18975
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
1008 success = pool->init(); |
18971
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1009 } else { |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1010 success = TRUE; |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1011 } |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1012 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1013 if (success) { |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1014 /* Register the Pool */ |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1015 cert_pools = g_list_prepend(cert_pools, pool); |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1016 |
19044
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1017 /* TODO: Emit a signal that the pool got registered */ |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1018 |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1019 purple_signal_register(pool, /* Signals emitted from pool */ |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1020 "certificate-stored", |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1021 purple_marshal_VOID__POINTER_POINTER, |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1022 NULL, /* No callback return value */ |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1023 2, /* Two non-data arguments */ |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1024 purple_value_new(PURPLE_TYPE_SUBTYPE, |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1025 PURPLE_SUBTYPE_CERTIFICATEPOOL), |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1026 purple_value_new(PURPLE_TYPE_STRING)); |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1027 |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1028 purple_signal_register(pool, /* Signals emitted from pool */ |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1029 "certificate-deleted", |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1030 purple_marshal_VOID__POINTER_POINTER, |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1031 NULL, /* No callback return value */ |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1032 2, /* Two non-data arguments */ |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1033 purple_value_new(PURPLE_TYPE_SUBTYPE, |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1034 PURPLE_SUBTYPE_CERTIFICATEPOOL), |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1035 purple_value_new(PURPLE_TYPE_STRING)); |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1036 |
18971
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1037 return TRUE; |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1038 } else { |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1039 return FALSE; |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1040 } |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1041 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1042 /* Control does not reach this point */ |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1043 } |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1044 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1045 gboolean |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1046 purple_certificate_unregister_pool(PurpleCertificatePool *pool) |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1047 { |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1048 /* TODO: Better error checking? */ |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1049 if (NULL == pool) { |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1050 purple_debug_warning("certificate", |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1051 "Attempting to unregister NULL pool\n"); |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1052 return FALSE; |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1053 } |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1054 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1055 /* Check that the pool is registered */ |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1056 if (!g_list_find(cert_pools, pool)) { |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1057 purple_debug_warning("certificate", |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1058 "Pool to unregister isn't registered!\n"); |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1059 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1060 return FALSE; |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1061 } |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1062 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1063 /* Uninit the pool if needed */ |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1064 if (pool->uninit) { |
18975
172b8d1dc2be
- CertificatePool member functions no longer accept a Pool instance, as Pools are expected to be singletons
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18973
diff
changeset
|
1065 pool->uninit(); |
18971
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1066 } |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1067 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1068 cert_pools = g_list_remove(cert_pools, pool); |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1069 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1070 /* TODO: Signalling? */ |
19044
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1071 purple_signal_unregister(pool, "certificate-stored"); |
602295db8e6b
- Register the certificate-stored and certificate-deleted signals
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19034
diff
changeset
|
1072 purple_signal_unregister(pool, "certificate-deleted"); |
18971
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1073 |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1074 return TRUE; |
898e2bd70f23
- Add find, register, and unregister for CertificatePools
William Ehlhardt <williamehlhardt@gmail.com>
parents:
18964
diff
changeset
|
1075 } |