annotate libpurple/plugins/ssl/ssl-gnutls.c @ 19550:0a6ed4e36ca8

Get rid of some stray whitespace and consistently use tab indentation
author Mark Doliner <mark@kingant.net>
date Thu, 30 Aug 2007 07:26:45 +0000
parents 5f4100c7dd00
children ce3dec442fec
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /**
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
2 * @file ssl-gnutls.c GNUTLS SSL plugin.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
3 *
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
4 * purple
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
5 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
6 * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org>
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
7 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
11 * (at your option) any later version.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
12 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
16 * GNU General Public License for more details.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
17 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
21 */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
22 #include "internal.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
23 #include "debug.h"
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
24 #include "certificate.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
25 #include "plugin.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
26 #include "sslconn.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
27 #include "version.h"
17766
fe571cfcf225 - Made a big mess of stuff in the GnuTLS pluging to look at cert auth
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17252
diff changeset
28 #include "util.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
29
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
30 #define SSL_GNUTLS_PLUGIN_ID "ssl-gnutls"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
31
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
32 #ifdef HAVE_GNUTLS
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
33
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
34 #include <gnutls/gnutls.h>
17766
fe571cfcf225 - Made a big mess of stuff in the GnuTLS pluging to look at cert auth
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17252
diff changeset
35 #include <gnutls/x509.h>
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
36
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
37 typedef struct
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
38 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
39 gnutls_session session;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
40 guint handshake_handler;
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
41 } PurpleSslGnutlsData;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
42
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
43 #define PURPLE_SSL_GNUTLS_DATA(gsc) ((PurpleSslGnutlsData *)gsc->private_data)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
44
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
45 static gnutls_certificate_client_credentials xcred;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
46
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
47 static void
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
48 ssl_gnutls_init_gnutls(void)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
49 {
17911
91feef6cbede - GnuTLS uses glib memory mgmt
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17793
diff changeset
50 /* Configure GnuTLS to use glib memory management */
91feef6cbede - GnuTLS uses glib memory mgmt
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17793
diff changeset
51 /* I expect that this isn't really necessary, but it may prevent
91feef6cbede - GnuTLS uses glib memory mgmt
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17793
diff changeset
52 some bugs */
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
53 /* TODO: It may be necessary to wrap this allocators for GnuTLS.
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
54 If there are strange bugs, perhaps look here (yes, I am a
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
55 hypocrite) */
17911
91feef6cbede - GnuTLS uses glib memory mgmt
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17793
diff changeset
56 gnutls_global_set_mem_functions(
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
57 (gnutls_alloc_function) g_malloc0, /* malloc */
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
58 (gnutls_alloc_function) g_malloc0, /* secure malloc */
17911
91feef6cbede - GnuTLS uses glib memory mgmt
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17793
diff changeset
59 NULL, /* mem_is_secure */
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
60 (gnutls_realloc_function) g_realloc, /* realloc */
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
61 (gnutls_free_function) g_free /* free */
17911
91feef6cbede - GnuTLS uses glib memory mgmt
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17793
diff changeset
62 );
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
63
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
64 gnutls_global_init();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
65
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
66 gnutls_certificate_allocate_credentials(&xcred);
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
67
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
68 /* TODO: I can likely remove this */
17781
3ce170204ef0 disapproval of revision '38e35430b0f7a8b7d764fca702732e7f1c652d02'
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17780
diff changeset
69 gnutls_certificate_set_x509_trust_file(xcred, "ca.pem",
3ce170204ef0 disapproval of revision '38e35430b0f7a8b7d764fca702732e7f1c652d02'
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17780
diff changeset
70 GNUTLS_X509_FMT_PEM);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
71 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
72
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
73 static gboolean
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
74 ssl_gnutls_init(void)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
75 {
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
76 return TRUE;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
77 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
78
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
79 static void
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
80 ssl_gnutls_uninit(void)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
81 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
82 gnutls_global_deinit();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
83
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
84 gnutls_certificate_free_credentials(xcred);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
85 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
86
18955
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
87 static void
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
88 ssl_gnutls_verified_cb(PurpleCertificateVerificationStatus st,
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
89 gpointer userdata)
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
90 {
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
91 PurpleSslConnection *gsc = (PurpleSslConnection *) userdata;
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
92
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
93 if (st == PURPLE_CERTIFICATE_VALID) {
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
94 /* Certificate valid? Good! Do the connection! */
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
95 gsc->connect_cb(gsc->connect_cb_data, gsc, PURPLE_INPUT_READ);
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
96 } else {
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
97 /* Otherwise, signal an error */
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
98 if(gsc->error_cb != NULL)
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
99 gsc->error_cb(gsc, PURPLE_SSL_CERTIFICATE_INVALID,
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
100 gsc->connect_cb_data);
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
101 purple_ssl_close(gsc);
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
102 }
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
103 }
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
104
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
105
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
106
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
107 static void ssl_gnutls_handshake_cb(gpointer data, gint source,
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
108 PurpleInputCondition cond)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
109 {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
110 PurpleSslConnection *gsc = data;
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
111 PurpleSslGnutlsData *gnutls_data = PURPLE_SSL_GNUTLS_DATA(gsc);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
112 ssize_t ret;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
113
18930
559f29b68dcf - Debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18927
diff changeset
114 purple_debug_info("gnutls", "Handshaking with %s\n", gsc->host);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
115 ret = gnutls_handshake(gnutls_data->session);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
116
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
117 if(ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
118 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
119
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
120 purple_input_remove(gnutls_data->handshake_handler);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
121 gnutls_data->handshake_handler = 0;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
122
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
123 if(ret != 0) {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
124 purple_debug_error("gnutls", "Handshake failed. Error %s\n",
15784
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
125 gnutls_strerror(ret));
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
126
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
127 if(gsc->error_cb != NULL)
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
128 gsc->error_cb(gsc, PURPLE_SSL_HANDSHAKE_FAILED,
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
129 gsc->connect_cb_data);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
130
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
131 purple_ssl_close(gsc);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
132 } else {
18938
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
133 /* Now we are cooking with gas! */
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
134 PurpleSslOps *ops = purple_ssl_get_ops();
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
135 GList * peers = ops->get_peer_certificates(gsc);
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
136
18938
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
137 PurpleCertificateScheme *x509 =
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
138 purple_certificate_find_scheme("x509");
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
139
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
140 GList * l;
19549
5f4100c7dd00 Fix compiler warnings about having a variable declaration after some
Mark Doliner <mark@kingant.net>
parents: 19498
diff changeset
141
5f4100c7dd00 Fix compiler warnings about having a variable declaration after some
Mark Doliner <mark@kingant.net>
parents: 19498
diff changeset
142 /* TODO: Remove all this debugging babble */
5f4100c7dd00 Fix compiler warnings about having a variable declaration after some
Mark Doliner <mark@kingant.net>
parents: 19498
diff changeset
143 purple_debug_info("gnutls", "Handshake complete\n");
5f4100c7dd00 Fix compiler warnings about having a variable declaration after some
Mark Doliner <mark@kingant.net>
parents: 19498
diff changeset
144
18938
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
145 for (l=peers; l; l = l->next) {
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
146 PurpleCertificate *crt = l->data;
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
147 GByteArray *z =
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
148 x509->get_fingerprint_sha1(crt);
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
149 gchar * fpr =
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
150 purple_base16_encode_chunked(z->data,
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
151 z->len);
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
152
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
153 purple_debug_info("gnutls/x509",
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
154 "Key print: %s\n",
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
155 fpr);
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
156
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
157 /* Kill the cert! */
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
158 x509->destroy_certificate(crt);
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
159
18938
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
160 g_free(fpr);
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
161 g_byte_array_free(z, TRUE);
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
162 }
f2ddc4b10d72 - Add debugging babble
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18935
diff changeset
163 g_list_free(peers);
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
164
17766
fe571cfcf225 - Made a big mess of stuff in the GnuTLS pluging to look at cert auth
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17252
diff changeset
165 {
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
166 const gnutls_datum_t *cert_list;
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
167 unsigned int cert_list_size = 0;
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
168 gnutls_session_t session=gnutls_data->session;
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
169 int i;
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
170
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
171 cert_list =
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
172 gnutls_certificate_get_peers(session, &cert_list_size);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
173
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
174 purple_debug_info("gnutls",
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
175 "Peer provided %d certs\n",
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
176 cert_list_size);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
177 for (i=0; i<cert_list_size; i++)
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
178 {
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
179 gchar fpr_bin[256];
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
180 gsize fpr_bin_sz = sizeof(fpr_bin);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
181 gchar * fpr_asc = NULL;
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
182 gchar tbuf[256];
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
183 gsize tsz=sizeof(tbuf);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
184 gchar * tasc = NULL;
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
185 gnutls_x509_crt_t cert;
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
186
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
187 gnutls_x509_crt_init(&cert);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
188 gnutls_x509_crt_import (cert, &cert_list[i],
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
189 GNUTLS_X509_FMT_DER);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
190
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
191 gnutls_x509_crt_get_fingerprint(cert, GNUTLS_MAC_SHA,
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
192 fpr_bin, &fpr_bin_sz);
17766
fe571cfcf225 - Made a big mess of stuff in the GnuTLS pluging to look at cert auth
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17252
diff changeset
193
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
194 fpr_asc =
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
195 purple_base16_encode_chunked((const guchar *)fpr_bin, fpr_bin_sz);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
196
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
197 purple_debug_info("gnutls",
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
198 "Lvl %d SHA1 fingerprint: %s\n",
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
199 i, fpr_asc);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
200
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
201 tsz=sizeof(tbuf);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
202 gnutls_x509_crt_get_serial(cert,tbuf,&tsz);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
203 tasc=purple_base16_encode_chunked((const guchar *)tbuf, tsz);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
204 purple_debug_info("gnutls",
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
205 "Serial: %s\n",
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
206 tasc);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
207 g_free(tasc);
17766
fe571cfcf225 - Made a big mess of stuff in the GnuTLS pluging to look at cert auth
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17252
diff changeset
208
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
209 tsz=sizeof(tbuf);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
210 gnutls_x509_crt_get_dn (cert, tbuf, &tsz);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
211 purple_debug_info("gnutls",
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
212 "Cert DN: %s\n",
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
213 tbuf);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
214 tsz=sizeof(tbuf);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
215 gnutls_x509_crt_get_issuer_dn (cert, tbuf, &tsz);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
216 purple_debug_info("gnutls",
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
217 "Cert Issuer DN: %s\n",
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
218 tbuf);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
219
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
220 g_free(fpr_asc);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
221 fpr_asc = NULL;
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
222 gnutls_x509_crt_deinit(cert);
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
223 }
17781
3ce170204ef0 disapproval of revision '38e35430b0f7a8b7d764fca702732e7f1c652d02'
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17780
diff changeset
224 }
18955
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
225
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
226 /* TODO: The following logic should really be in libpurple */
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
227 /* If a Verifier was given, hand control over to it */
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
228 if (gsc->verifier) {
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
229 GList *peers;
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
230 /* First, get the peer cert chain */
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
231 peers = purple_ssl_get_peer_certificates(gsc);
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
232
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
233 /* Now kick off the verification process */
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
234 purple_certificate_verify(gsc->verifier,
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
235 gsc->host,
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
236 peers,
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
237 ssl_gnutls_verified_cb,
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
238 gsc);
19021
fcca10d0ac7d - purple_certificate_verify no longer takes possession of the
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19019
diff changeset
239
fcca10d0ac7d - purple_certificate_verify no longer takes possession of the
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19019
diff changeset
240 purple_certificate_destroy_list(peers);
18955
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
241 } else {
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
242 /* Otherwise, just call the "connection complete"
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
243 callback */
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
244 gsc->connect_cb(gsc->connect_cb_data, gsc, cond);
f393eddab077 - ssl-gnutls plugin uses Verifiers now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18938
diff changeset
245 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
246 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
247
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
248 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
249
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
250
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
251 static void
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
252 ssl_gnutls_connect(PurpleSslConnection *gsc)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
253 {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
254 PurpleSslGnutlsData *gnutls_data;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
255 static const int cert_type_priority[2] = { GNUTLS_CRT_X509, 0 };
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
256
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
257 gnutls_data = g_new0(PurpleSslGnutlsData, 1);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
258 gsc->private_data = gnutls_data;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
259
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
260 gnutls_init(&gnutls_data->session, GNUTLS_CLIENT);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
261 gnutls_set_default_priority(gnutls_data->session);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
262
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
263 gnutls_certificate_type_set_priority(gnutls_data->session,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
264 cert_type_priority);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
265
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
266 gnutls_credentials_set(gnutls_data->session, GNUTLS_CRD_CERTIFICATE,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
267 xcred);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
268
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
269 gnutls_transport_set_ptr(gnutls_data->session, GINT_TO_POINTER(gsc->fd));
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
270
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
271 gnutls_data->handshake_handler = purple_input_add(gsc->fd,
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
272 PURPLE_INPUT_READ, ssl_gnutls_handshake_cb, gsc);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
273
17252
a2edef5eb1b1 - Document some weird-looking logic in the GnuTLS plugin.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 16665
diff changeset
274 /* Orborde asks: Why are we configuring a callback, then
a2edef5eb1b1 - Document some weird-looking logic in the GnuTLS plugin.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 16665
diff changeset
275 immediately calling it?
a2edef5eb1b1 - Document some weird-looking logic in the GnuTLS plugin.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 16665
diff changeset
276
a2edef5eb1b1 - Document some weird-looking logic in the GnuTLS plugin.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 16665
diff changeset
277 Answer: gnutls_handshake (up in handshake_cb) needs to be called
a2edef5eb1b1 - Document some weird-looking logic in the GnuTLS plugin.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 16665
diff changeset
278 once in order to get the ball rolling on the SSL connection.
a2edef5eb1b1 - Document some weird-looking logic in the GnuTLS plugin.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 16665
diff changeset
279 Once it has done so, only then will the server reply, triggering
a2edef5eb1b1 - Document some weird-looking logic in the GnuTLS plugin.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 16665
diff changeset
280 the callback.
a2edef5eb1b1 - Document some weird-looking logic in the GnuTLS plugin.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 16665
diff changeset
281
a2edef5eb1b1 - Document some weird-looking logic in the GnuTLS plugin.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 16665
diff changeset
282 Since the logic driving gnutls_handshake is the same with the first
a2edef5eb1b1 - Document some weird-looking logic in the GnuTLS plugin.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 16665
diff changeset
283 and subsequent calls, we'll just fire the callback immediately to
a2edef5eb1b1 - Document some weird-looking logic in the GnuTLS plugin.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 16665
diff changeset
284 accomplish this.
a2edef5eb1b1 - Document some weird-looking logic in the GnuTLS plugin.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 16665
diff changeset
285 */
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
286 ssl_gnutls_handshake_cb(gsc, gsc->fd, PURPLE_INPUT_READ);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
287 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
288
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
289 static void
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
290 ssl_gnutls_close(PurpleSslConnection *gsc)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
291 {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
292 PurpleSslGnutlsData *gnutls_data = PURPLE_SSL_GNUTLS_DATA(gsc);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
293
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
294 if(!gnutls_data)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
295 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
296
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
297 if(gnutls_data->handshake_handler)
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
298 purple_input_remove(gnutls_data->handshake_handler);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
299
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
300 gnutls_bye(gnutls_data->session, GNUTLS_SHUT_RDWR);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
301
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
302 gnutls_deinit(gnutls_data->session);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
303
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
304 g_free(gnutls_data);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
305 gsc->private_data = NULL;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
306 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
307
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
308 static size_t
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
309 ssl_gnutls_read(PurpleSslConnection *gsc, void *data, size_t len)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
310 {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
311 PurpleSslGnutlsData *gnutls_data = PURPLE_SSL_GNUTLS_DATA(gsc);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
312 ssize_t s;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
313
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
314 s = gnutls_record_recv(gnutls_data->session, data, len);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
315
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
316 if(s == GNUTLS_E_AGAIN || s == GNUTLS_E_INTERRUPTED) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
317 s = -1;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
318 errno = EAGAIN;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
319 } else if(s < 0) {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
320 purple_debug_error("gnutls", "receive failed: %s\n",
15784
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
321 gnutls_strerror(s));
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
322 s = -1;
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
323 /*
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
324 * TODO: Set errno to something more appropriate. Or even
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
325 * better: allow ssl plugins to keep track of their
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
326 * own error message, then add a new ssl_ops function
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
327 * that returns the error message.
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
328 */
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
329 errno = EIO;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
330 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
331
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
332 return s;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
333 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
334
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
335 static size_t
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
336 ssl_gnutls_write(PurpleSslConnection *gsc, const void *data, size_t len)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
337 {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
338 PurpleSslGnutlsData *gnutls_data = PURPLE_SSL_GNUTLS_DATA(gsc);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
339 ssize_t s = 0;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
340
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
341 /* XXX: when will gnutls_data be NULL? */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
342 if(gnutls_data)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
343 s = gnutls_record_send(gnutls_data->session, data, len);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
344
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
345 if(s == GNUTLS_E_AGAIN || s == GNUTLS_E_INTERRUPTED) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
346 s = -1;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
347 errno = EAGAIN;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
348 } else if(s < 0) {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
349 purple_debug_error("gnutls", "send failed: %s\n",
15784
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
350 gnutls_strerror(s));
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
351 s = -1;
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
352 /*
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
353 * TODO: Set errno to something more appropriate. Or even
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
354 * better: allow ssl plugins to keep track of their
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
355 * own error message, then add a new ssl_ops function
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
356 * that returns the error message.
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
357 */
eed84b59c252 There were a few problems here
Mark Doliner <mark@kingant.net>
parents: 15373
diff changeset
358 errno = EIO;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
359 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
360
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
361 return s;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
362 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
363
19491
4f472eef762c - TODO-whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19218
diff changeset
364 /* Forward declarations are fun! */
18189
030a2209ae96 - Style issues
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18188
diff changeset
365 static PurpleCertificate *
18186
80c909c5bb7a - Add a mode switch to allow DER or PEM imports (necessary because SSL certs
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17914
diff changeset
366 x509_import_from_datum(const gnutls_datum_t dt, gnutls_x509_crt_fmt_t mode);
17914
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
367
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
368 static GList *
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
369 ssl_gnutls_get_peer_certificates(PurpleSslConnection * gsc)
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
370 {
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
371 PurpleSslGnutlsData *gnutls_data = PURPLE_SSL_GNUTLS_DATA(gsc);
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
372
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
373 /* List of Certificate instances to return */
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
374 GList * peer_certs = NULL;
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
375
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
376 /* List of raw certificates as given by GnuTLS */
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
377 const gnutls_datum_t *cert_list;
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
378 unsigned int cert_list_size = 0;
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
379
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
380 unsigned int i;
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
381
17914
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
382 /* This should never, ever happen. */
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
383 g_return_val_if_fail( gnutls_certificate_type_get (gnutls_data->session) == GNUTLS_CRT_X509, NULL);
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
384
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
385 /* Get the certificate list from GnuTLS */
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
386 /* TODO: I am _pretty sure_ this doesn't block or do other exciting things */
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
387 cert_list = gnutls_certificate_get_peers(gnutls_data->session,
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
388 &cert_list_size);
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
389
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
390 /* Convert each certificate to a Certificate and append it to the list */
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
391 for (i = 0; i < cert_list_size; i++) {
18189
030a2209ae96 - Style issues
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18188
diff changeset
392 PurpleCertificate * newcrt = x509_import_from_datum(cert_list[i],
18186
80c909c5bb7a - Add a mode switch to allow DER or PEM imports (necessary because SSL certs
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17914
diff changeset
393 GNUTLS_X509_FMT_DER);
17914
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
394 /* Append is somewhat inefficient on linked lists, but is easy
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
395 to read. If someone complains, I'll change it.
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
396 TODO: Is anyone complaining? (Maybe elb?) */
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
397 peer_certs = g_list_append(peer_certs, newcrt);
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
398 }
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
399
19491
4f472eef762c - TODO-whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19218
diff changeset
400 /* cert_list doesn't need free()-ing */
17914
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
401
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
402 return peer_certs;
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
403 }
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
404
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
405 /************************************************************************/
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
406 /* X.509 functionality */
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
407 /************************************************************************/
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
408 const gchar * SCHEME_NAME = "x509";
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
409
18189
030a2209ae96 - Style issues
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18188
diff changeset
410 static PurpleCertificateScheme x509_gnutls;
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
411
19017
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
412 /** Refcounted GnuTLS certificate data instance */
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
413 typedef struct {
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
414 gint refcount;
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
415 gnutls_x509_crt_t crt;
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
416 } x509_crtdata_t;
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
417
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
418 /** Helper functions for reference counting */
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
419 static x509_crtdata_t *
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
420 x509_crtdata_addref(x509_crtdata_t *cd)
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
421 {
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
422 (cd->refcount)++;
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
423 return cd;
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
424 }
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
425
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
426 static void
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
427 x509_crtdata_delref(x509_crtdata_t *cd)
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
428 {
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
429 g_assert(cd->refcount > 0);
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
430
19017
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
431 (cd->refcount)--;
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
432
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
433 /* If the refcount reaches zero, kill the structure */
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
434 if (cd->refcount == 0) {
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
435 purple_debug_info("gnutls/x509",
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
436 "Freeing unused cert data at %p\n",
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
437 cd);
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
438 /* Kill the internal data */
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
439 gnutls_x509_crt_deinit( cd->crt );
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
440 /* And kill the struct */
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
441 g_free( cd );
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
442 }
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
443 }
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
444
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
445 /** Helper macro to retrieve the GnuTLS crt_t from a PurpleCertificate */
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
446 #define X509_GET_GNUTLS_DATA(pcrt) ( ((x509_crtdata_t *) (pcrt->data))->crt)
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
447
17914
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
448 /** Transforms a gnutls_datum_t containing an X.509 certificate into a Certificate instance under the x509_gnutls scheme
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
449 *
18186
80c909c5bb7a - Add a mode switch to allow DER or PEM imports (necessary because SSL certs
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17914
diff changeset
450 * @param dt Datum to transform
80c909c5bb7a - Add a mode switch to allow DER or PEM imports (necessary because SSL certs
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17914
diff changeset
451 * @param mode GnuTLS certificate format specifier (GNUTLS_X509_FMT_PEM for
80c909c5bb7a - Add a mode switch to allow DER or PEM imports (necessary because SSL certs
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17914
diff changeset
452 * reading from files, and GNUTLS_X509_FMT_DER for converting
80c909c5bb7a - Add a mode switch to allow DER or PEM imports (necessary because SSL certs
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17914
diff changeset
453 * "over the wire" certs for SSL)
17914
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
454 *
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
455 * @return A newly allocated Certificate structure of the x509_gnutls scheme
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
456 */
18189
030a2209ae96 - Style issues
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18188
diff changeset
457 static PurpleCertificate *
18186
80c909c5bb7a - Add a mode switch to allow DER or PEM imports (necessary because SSL certs
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17914
diff changeset
458 x509_import_from_datum(const gnutls_datum_t dt, gnutls_x509_crt_fmt_t mode)
17914
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
459 {
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
460 /* Internal certificate data structure */
19017
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
461 x509_crtdata_t *certdat;
17914
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
462 /* New certificate to return */
18189
030a2209ae96 - Style issues
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18188
diff changeset
463 PurpleCertificate * crt;
17914
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
464
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
465 /* Allocate and prepare the internal certificate data */
19017
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
466 certdat = g_new0(x509_crtdata_t, 1);
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
467 gnutls_x509_crt_init(&(certdat->crt));
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
468 certdat->refcount = 0;
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
469
17914
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
470 /* Perform the actual certificate parse */
19017
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
471 /* Yes, certdat->crt should be passed as-is */
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
472 gnutls_x509_crt_import(certdat->crt, &dt, mode);
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
473
17914
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
474 /* Allocate the certificate and load it with data */
18961
fa138dbacff5 - More g_new0 instead of g_new
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18955
diff changeset
475 crt = g_new0(PurpleCertificate, 1);
17914
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
476 crt->scheme = &x509_gnutls;
19017
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
477 crt->data = x509_crtdata_addref(certdat);
17914
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
478
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
479 return crt;
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
480 }
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
481
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
482 /** Imports a PEM-formatted X.509 certificate from the specified file.
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
483 * @param filename Filename to import from. Format is PEM
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
484 *
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
485 * @return A newly allocated Certificate structure of the x509_gnutls scheme
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
486 */
18189
030a2209ae96 - Style issues
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18188
diff changeset
487 static PurpleCertificate *
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
488 x509_import_from_file(const gchar * filename)
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
489 {
18189
030a2209ae96 - Style issues
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18188
diff changeset
490 PurpleCertificate *crt; /* Certificate being constructed */
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
491 gchar *buf; /* Used to load the raw file data */
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
492 gsize buf_sz; /* Size of the above */
17914
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
493 gnutls_datum_t dt; /* Struct to pass down to GnuTLS */
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
494
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
495 purple_debug_info("gnutls",
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
496 "Attempting to load X.509 certificate from %s\n",
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
497 filename);
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
498
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
499 /* Next, we'll simply yank the entire contents of the file
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
500 into memory */
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
501 /* TODO: Should I worry about very large files here? */
19491
4f472eef762c - TODO-whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19218
diff changeset
502 g_return_val_if_fail(
4f472eef762c - TODO-whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19218
diff changeset
503 g_file_get_contents(filename,
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
504 &buf,
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
505 &buf_sz,
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
506 NULL /* No error checking for now */
19491
4f472eef762c - TODO-whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19218
diff changeset
507 ),
4f472eef762c - TODO-whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19218
diff changeset
508 NULL);
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
509
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
510 /* Load the datum struct */
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
511 dt.data = (unsigned char *) buf;
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
512 dt.size = buf_sz;
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
513
17914
2f119e2a1b33 - Wrote GnuTLS get_peer_certificates function
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17913
diff changeset
514 /* Perform the conversion */
18186
80c909c5bb7a - Add a mode switch to allow DER or PEM imports (necessary because SSL certs
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17914
diff changeset
515 crt = x509_import_from_datum(dt,
80c909c5bb7a - Add a mode switch to allow DER or PEM imports (necessary because SSL certs
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17914
diff changeset
516 GNUTLS_X509_FMT_PEM); // files should be in PEM format
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
517
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
518 /* Cleanup */
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
519 g_free(buf);
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
520
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
521 return crt;
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
522 }
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
523
18977
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
524 /**
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
525 * Exports a PEM-formatted X.509 certificate to the specified file.
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
526 * @param filename Filename to export to. Format will be PEM
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
527 * @param crt Certificate to export
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
528 *
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
529 * @return TRUE if success, otherwise FALSE
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
530 */
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
531 static gboolean
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
532 x509_export_certificate(const gchar *filename, PurpleCertificate *crt)
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
533 {
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
534 gnutls_x509_crt_t crt_dat; /* GnuTLS cert struct */
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
535 int ret;
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
536 gchar * out_buf; /* Data to output */
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
537 size_t out_size; /* Output size */
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
538 gboolean success = FALSE;
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
539
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
540 /* Paranoia paranoia paranoia! */
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
541 g_return_val_if_fail(filename, FALSE);
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
542 g_return_val_if_fail(crt, FALSE);
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
543 g_return_val_if_fail(crt->scheme == &x509_gnutls, FALSE);
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
544 g_return_val_if_fail(crt->data, FALSE);
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
545
19017
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
546 crt_dat = X509_GET_GNUTLS_DATA(crt);
18977
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
547
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
548 /* Obtain the output size required */
19004
d4065b26dcac - Fix intermittent crash due to uninitialized variable
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19003
diff changeset
549 out_size = 0;
18977
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
550 ret = gnutls_x509_crt_export(crt_dat, GNUTLS_X509_FMT_PEM,
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
551 NULL, /* Provide no buffer yet */
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
552 &out_size /* Put size here */
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
553 );
19002
daeca1b9ebdb - Fix an incorrect assertion in GnuTLS plugin
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18977
diff changeset
554 g_return_val_if_fail(ret == GNUTLS_E_SHORT_MEMORY_BUFFER, FALSE);
18977
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
555
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
556 /* Now allocate a buffer and *really* export it */
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
557 out_buf = g_new0(gchar, out_size);
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
558 ret = gnutls_x509_crt_export(crt_dat, GNUTLS_X509_FMT_PEM,
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
559 out_buf, /* Export to our new buffer */
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
560 &out_size /* Put size here */
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
561 );
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
562 if (ret != 0) {
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
563 purple_debug_error("gnutls/x509",
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
564 "Failed to export cert to buffer with code %d\n",
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
565 ret);
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
566 g_free(out_buf);
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
567 return FALSE;
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
568 }
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
569
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
570 /* Write it out to an actual file */
19498
7589b218f89a - Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19494
diff changeset
571 success = purple_util_write_data_to_file_absolute(filename,
7589b218f89a - Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19494
diff changeset
572 out_buf, out_size);
18977
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
573
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
574 g_free(out_buf);
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
575 g_return_val_if_fail(success, FALSE);
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
576 return success;
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
577 }
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
578
19019
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
579 static PurpleCertificate *
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
580 x509_copy_certificate(PurpleCertificate *crt)
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
581 {
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
582 x509_crtdata_t *crtdat;
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
583 PurpleCertificate *newcrt;
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
584
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
585 g_return_val_if_fail(crt, NULL);
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
586 g_return_val_if_fail(crt->scheme == &x509_gnutls, NULL);
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
587
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
588 crtdat = (x509_crtdata_t *) crt->data;
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
589
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
590 newcrt = g_new0(PurpleCertificate, 1);
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
591 newcrt->scheme = &x509_gnutls;
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
592 newcrt->data = x509_crtdata_addref(crtdat);
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
593
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
594 return newcrt;
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
595 }
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
596 /** Frees a Certificate
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
597 *
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
598 * Destroys a Certificate's internal data structures and frees the pointer
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
599 * given.
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
600 * @param crt Certificate instance to be destroyed. It WILL NOT be destroyed
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
601 * if it is not of the correct CertificateScheme. Can be NULL
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
602 *
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
603 */
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
604 static void
18189
030a2209ae96 - Style issues
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18188
diff changeset
605 x509_destroy_certificate(PurpleCertificate * crt)
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
606 {
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
607 if (NULL == crt) return;
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
608
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
609 /* Check that the scheme is x509_gnutls */
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
610 if ( crt->scheme != &x509_gnutls ) {
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
611 purple_debug_error("gnutls",
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
612 "destroy_certificate attempted on certificate of wrong scheme (scheme was %s, expected %s)\n",
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
613 crt->scheme->name,
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
614 SCHEME_NAME);
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
615 return;
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
616 }
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
617
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
618 g_return_if_fail(crt->data != NULL);
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
619 g_return_if_fail(crt->scheme != NULL);
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
620
19017
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
621 /* Use the reference counting system to free (or not) the
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
622 underlying data */
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
623 x509_crtdata_delref((x509_crtdata_t *)crt->data);
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
624
17913
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
625 /* Kill the structure itself */
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
626 g_free(crt);
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
627 }
55a0b0a42000 - Exposed the _Certificate struct definition in certificate.h
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17911
diff changeset
628
18191
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
629 /** Determines whether one certificate has been issued and signed by another
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
630 *
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
631 * @param crt Certificate to check the signature of
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
632 * @param issuer Issuer's certificate
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
633 *
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
634 * @return TRUE if crt was signed and issued by issuer, otherwise FALSE
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
635 * @TODO Modify this function to return a reason for invalidity?
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
636 */
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
637 static gboolean
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
638 x509_certificate_signed_by(PurpleCertificate * crt,
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
639 PurpleCertificate * issuer)
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
640 {
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
641 gnutls_x509_crt_t crt_dat;
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
642 gnutls_x509_crt_t issuer_dat;
19212
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
643 unsigned int verify; /* used to store result from GnuTLS verifier */
18191
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
644 int ret;
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
645
18191
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
646 g_return_val_if_fail(crt, FALSE);
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
647 g_return_val_if_fail(issuer, FALSE);
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
648
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
649 /* Verify that both certs are the correct scheme */
18963
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
650 g_return_val_if_fail(crt->scheme == &x509_gnutls, FALSE);
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
651 g_return_val_if_fail(issuer->scheme == &x509_gnutls, FALSE);
18191
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
652
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
653 /* TODO: check for more nullness? */
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
654
19017
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
655 crt_dat = X509_GET_GNUTLS_DATA(crt);
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
656 issuer_dat = X509_GET_GNUTLS_DATA(issuer);
18191
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
657
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
658 /* First, let's check that crt.issuer is actually issuer */
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
659 ret = gnutls_x509_crt_check_issuer(crt_dat, issuer_dat);
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
660 if (ret <= 0) {
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
661
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
662 if (ret < 0) {
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
663 purple_debug_error("gnutls/x509",
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
664 "GnuTLS error %d while checking certificate issuer match.",
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
665 ret);
19212
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
666 } else {
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
667 gchar *crt_id, *issuer_id, *crt_issuer_id;
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
668 crt_id = purple_certificate_get_unique_id(crt);
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
669 issuer_id = purple_certificate_get_unique_id(issuer);
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
670 crt_issuer_id =
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
671 purple_certificate_get_issuer_unique_id(crt);
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
672 purple_debug_info("gnutls/x509",
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
673 "Certificate for %s claims to be "
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
674 "issued by %s, but the certificate "
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
675 "for %s does not match. A strcmp "
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
676 "says %d\n",
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
677 crt_id, crt_issuer_id, issuer_id,
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
678 strcmp(crt_issuer_id, issuer_id));
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
679 g_free(crt_id);
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
680 g_free(issuer_id);
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
681 g_free(crt_issuer_id);
18191
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
682 }
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
683
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
684 /* The issuer is not correct, or there were errors */
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
685 return FALSE;
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
686 }
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
687
18191
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
688 /* Now, check the signature */
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
689 /* The second argument is a ptr to an array of "trusted" issuer certs,
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
690 but we're only using one trusted one */
19218
0e17da726a8c - x509_signed_by now accepts a signature by an X.509 version 1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19215
diff changeset
691 ret = gnutls_x509_crt_verify(crt_dat, &issuer_dat, 1,
0e17da726a8c - x509_signed_by now accepts a signature by an X.509 version 1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19215
diff changeset
692 /* Permit signings by X.509v1 certs
0e17da726a8c - x509_signed_by now accepts a signature by an X.509 version 1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19215
diff changeset
693 (Verisign and possibly others have
0e17da726a8c - x509_signed_by now accepts a signature by an X.509 version 1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19215
diff changeset
694 root certificates that predate the
0e17da726a8c - x509_signed_by now accepts a signature by an X.509 version 1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19215
diff changeset
695 current standard) */
0e17da726a8c - x509_signed_by now accepts a signature by an X.509 version 1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19215
diff changeset
696 GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT,
0e17da726a8c - x509_signed_by now accepts a signature by an X.509 version 1
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19215
diff changeset
697 &verify);
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
698
19212
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
699 if (ret != 0) {
18191
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
700 purple_debug_error("gnutls/x509",
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
701 "Attempted certificate verification caused a GnuTLS error code %d. I will just say the signature is bad, but you should look into this.\n", ret);
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
702 return FALSE;
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
703 }
19212
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
704
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
705 if (verify & GNUTLS_CERT_INVALID) {
18191
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
706 /* Signature didn't check out, but at least
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
707 there were no errors*/
19212
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
708 gchar *crt_id = purple_certificate_get_unique_id(crt);
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
709 gchar *issuer_id = purple_certificate_get_issuer_unique_id(crt);
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
710 purple_debug_info("gnutls/x509",
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
711 "Bad signature for %s on %s\n",
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
712 issuer_id, crt_id);
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
713 g_free(crt_id);
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
714 g_free(issuer_id);
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
715
18191
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
716 return FALSE;
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
717 } /* if (ret, etc.) */
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
718
19212
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
719 /* If we got here, the signature is good */
2c7c934bfb4e - Fix x509_signed_by. Apparently I can't read documentation.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19079
diff changeset
720 return TRUE;
18191
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
721 }
a4336814bfd4 - Add x509_certificate_signed_by, which checks a signature on a certificate made by an issuer
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18189
diff changeset
722
18935
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
723 static GByteArray *
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
724 x509_sha1sum(PurpleCertificate *crt)
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
725 {
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
726 size_t hashlen = 20; /* SHA1 hashes are 20 bytes */
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
727 size_t tmpsz = hashlen; /* Throw-away variable for GnuTLS to stomp on*/
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
728 gnutls_x509_crt_t crt_dat;
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
729 GByteArray *hash; /**< Final hash container */
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
730 guchar hashbuf[hashlen]; /**< Temporary buffer to contain hash */
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
731
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
732 g_return_val_if_fail(crt, NULL);
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
733
19017
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
734 crt_dat = X509_GET_GNUTLS_DATA(crt);
18935
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
735
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
736 /* Extract the fingerprint */
19492
447470c8111a - More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19491
diff changeset
737 g_return_val_if_fail(
447470c8111a - More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19491
diff changeset
738 0 == gnutls_x509_crt_get_fingerprint(crt_dat, GNUTLS_MAC_SHA,
447470c8111a - More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19491
diff changeset
739 hashbuf, &tmpsz),
447470c8111a - More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19491
diff changeset
740 NULL);
18935
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
741
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
742 /* This shouldn't happen */
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
743 g_return_val_if_fail(tmpsz == hashlen, NULL);
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
744
18935
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
745 /* Okay, now create and fill hash array */
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
746 hash = g_byte_array_new();
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
747 g_byte_array_append(hash, hashbuf, hashlen);
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
748
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
749 return hash;
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
750 }
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
751
18963
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
752 static gchar *
19079
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
753 x509_cert_dn (PurpleCertificate *crt)
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
754 {
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
755 gnutls_x509_crt_t cert_dat;
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
756 gchar *dn = NULL;
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
757 size_t dn_size;
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
758
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
759 g_return_val_if_fail(crt, NULL);
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
760 g_return_val_if_fail(crt->scheme == &x509_gnutls, NULL);
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
761
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
762 cert_dat = X509_GET_GNUTLS_DATA(crt);
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
763
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
764 /* Figure out the length of the Distinguished Name */
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
765 /* Claim that the buffer is size 0 so GnuTLS just tells us how much
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
766 space it needs */
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
767 dn_size = 0;
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
768 gnutls_x509_crt_get_dn(cert_dat, dn, &dn_size);
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
769
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
770 /* Now allocate and get the Distinguished Name */
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
771 dn = g_new0(gchar, dn_size);
19493
e147c3a821dd - Errorchecking in x509_cert_dn
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19492
diff changeset
772 if (0 != gnutls_x509_crt_get_dn(cert_dat, dn, &dn_size)) {
e147c3a821dd - Errorchecking in x509_cert_dn
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19492
diff changeset
773 purple_debug_error("gnutls/x509",
e147c3a821dd - Errorchecking in x509_cert_dn
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19492
diff changeset
774 "Failed to get Distinguished Name\n");
e147c3a821dd - Errorchecking in x509_cert_dn
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19492
diff changeset
775 g_free(dn);
e147c3a821dd - Errorchecking in x509_cert_dn
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19492
diff changeset
776 return NULL;
e147c3a821dd - Errorchecking in x509_cert_dn
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19492
diff changeset
777 }
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
778
19079
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
779 return dn;
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
780 }
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
781
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
782 static gchar *
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
783 x509_issuer_dn (PurpleCertificate *crt)
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
784 {
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
785 gnutls_x509_crt_t cert_dat;
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
786 gchar *dn = NULL;
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
787 size_t dn_size;
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
788
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
789 g_return_val_if_fail(crt, NULL);
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
790 g_return_val_if_fail(crt->scheme == &x509_gnutls, NULL);
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
791
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
792 cert_dat = X509_GET_GNUTLS_DATA(crt);
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
793
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
794 /* Figure out the length of the Distinguished Name */
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
795 /* Claim that the buffer is size 0 so GnuTLS just tells us how much
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
796 space it needs */
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
797 dn_size = 0;
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
798 gnutls_x509_crt_get_issuer_dn(cert_dat, dn, &dn_size);
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
799
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
800 /* Now allocate and get the Distinguished Name */
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
801 dn = g_new0(gchar, dn_size);
19494
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
802 if (0 != gnutls_x509_crt_get_issuer_dn(cert_dat, dn, &dn_size)) {
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
803 purple_debug_error("gnutls/x509",
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
804 "Failed to get issuer's Distinguished "
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
805 "Name\n");
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
806 g_free(dn);
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
807 return NULL;
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
808 }
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
809
19079
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
810 return dn;
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
811 }
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
812
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
813 static gchar *
18963
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
814 x509_common_name (PurpleCertificate *crt)
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
815 {
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
816 gnutls_x509_crt_t cert_dat;
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
817 gchar *cn = NULL;
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
818 size_t cn_size;
19494
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
819 int ret;
18963
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
820
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
821 g_return_val_if_fail(crt, NULL);
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
822 g_return_val_if_fail(crt->scheme == &x509_gnutls, NULL);
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
823
19017
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
824 cert_dat = X509_GET_GNUTLS_DATA(crt);
18963
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
825
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
826 /* Figure out the length of the Common Name */
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
827 /* Claim that the buffer is size 0 so GnuTLS just tells us how much
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
828 space it needs */
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
829 cn_size = 0;
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
830 gnutls_x509_crt_get_dn_by_oid(cert_dat,
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
831 GNUTLS_OID_X520_COMMON_NAME,
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
832 0, /* First CN found, please */
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
833 0, /* Not in raw mode */
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
834 cn, &cn_size);
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
835
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
836 /* Now allocate and get the Common Name */
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
837 cn = g_new0(gchar, cn_size);
19494
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
838 ret = gnutls_x509_crt_get_dn_by_oid(cert_dat,
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
839 GNUTLS_OID_X520_COMMON_NAME,
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
840 0, /* First CN found, please */
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
841 0, /* Not in raw mode */
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
842 cn, &cn_size);
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
843 if (ret != 0) {
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
844 purple_debug_error("gnutls/x509",
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
845 "Failed to get Common Name\n");
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
846 g_free(cn);
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
847 return NULL;
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
848 }
280c6ec32ca6 - Yet More TODO whacking
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19493
diff changeset
849
18963
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
850 return cn;
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
851 }
146907cd3b07 - Add subject_name (AKA Common Name) functions to GnuTLS x509 scheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18961
diff changeset
852
19008
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
853 static gboolean
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
854 x509_check_name (PurpleCertificate *crt, const gchar *name)
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
855 {
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
856 gnutls_x509_crt_t crt_dat;
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
857
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
858 g_return_val_if_fail(crt, FALSE);
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
859 g_return_val_if_fail(crt->scheme == &x509_gnutls, FALSE);
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
860 g_return_val_if_fail(name, FALSE);
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
861
19017
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
862 crt_dat = X509_GET_GNUTLS_DATA(crt);
19008
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
863
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
864 if (gnutls_x509_crt_check_hostname(crt_dat, name)) {
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
865 return TRUE;
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
866 } else {
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
867 return FALSE;
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
868 }
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
869 }
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
870
19067
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
871 static gboolean
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
872 x509_times (PurpleCertificate *crt, time_t *activation, time_t *expiration)
19013
5157ebe90b93 - Add activation/expiration time retrievers to GnuTLS plugin
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
873 {
5157ebe90b93 - Add activation/expiration time retrievers to GnuTLS plugin
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
874 gnutls_x509_crt_t crt_dat;
19067
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
875 /* GnuTLS time functions return this on error */
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
876 const time_t errval = (time_t) (-1);
19013
5157ebe90b93 - Add activation/expiration time retrievers to GnuTLS plugin
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
877
19067
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
878
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
879 g_return_val_if_fail(crt, FALSE);
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
880 g_return_val_if_fail(crt->scheme == &x509_gnutls, FALSE);
19013
5157ebe90b93 - Add activation/expiration time retrievers to GnuTLS plugin
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
881
19017
e6558bae2bc6 - GnuTLS plugin now uses reference counting to manage its underlying
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
882 crt_dat = X509_GET_GNUTLS_DATA(crt);
19013
5157ebe90b93 - Add activation/expiration time retrievers to GnuTLS plugin
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
883
19067
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
884 if (activation) {
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
885 *activation = gnutls_x509_crt_get_activation_time(crt_dat);
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
886 }
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
887 if (expiration) {
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
888 *expiration = gnutls_x509_crt_get_expiration_time(crt_dat);
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
889 }
19013
5157ebe90b93 - Add activation/expiration time retrievers to GnuTLS plugin
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
890
19067
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
891 if (*activation == errval || *expiration == errval) {
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
892 return FALSE;
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
893 }
19550
0a6ed4e36ca8 Get rid of some stray whitespace and consistently use tab indentation
Mark Doliner <mark@kingant.net>
parents: 19549
diff changeset
894
19067
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
895 return TRUE;
19013
5157ebe90b93 - Add activation/expiration time retrievers to GnuTLS plugin
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
896 }
5157ebe90b93 - Add activation/expiration time retrievers to GnuTLS plugin
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
897
18189
030a2209ae96 - Style issues
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18188
diff changeset
898 /* X.509 certificate operations provided by this plugin */
030a2209ae96 - Style issues
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18188
diff changeset
899 static PurpleCertificateScheme x509_gnutls = {
030a2209ae96 - Style issues
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18188
diff changeset
900 "x509", /* Scheme name */
030a2209ae96 - Style issues
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18188
diff changeset
901 N_("X.509 Certificates"), /* User-visible scheme name */
030a2209ae96 - Style issues
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18188
diff changeset
902 x509_import_from_file, /* Certificate import function */
18977
31bdbb82de7e - Add purple_certificate_export and associated libpurple stuff
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18963
diff changeset
903 x509_export_certificate, /* Certificate export function */
19019
e179e7e6ded7 - Add GnuTLS X.509 cert copy operator
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19018
diff changeset
904 x509_copy_certificate, /* Copy */
18934
04be1b885ef3 - Add more to the Certificate struct
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18930
diff changeset
905 x509_destroy_certificate, /* Destroy cert */
19076
daa68185a018 - Add purple_certificate_signed_by
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19067
diff changeset
906 x509_certificate_signed_by, /* Signature checker */
18935
cb9d2b9ad6bc - Add GnuTLS SHA1 key fingerprinter
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18934
diff changeset
907 x509_sha1sum, /* SHA1 fingerprint */
19079
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
908 x509_cert_dn, /* Unique ID */
05ae340c42cc - Add unique_id and issuer_unique_id constructions (defined as Distinguished
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19076
diff changeset
909 x509_issuer_dn, /* Issuer Unique ID */
19006
dc60287ce426 - Add get_activation_time and get_expiration_time to CertificateScheme
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19004
diff changeset
910 x509_common_name, /* Subject name */
19008
7fd9bd55f8d0 - Add certificate_check_subject_name and associated machinery
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19007
diff changeset
911 x509_check_name, /* Check subject name */
19067
6c0aad79c4c5 - Change the internal structure of activation/expiration times to match
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19021
diff changeset
912 x509_times /* Activation/Expiration time */
18189
030a2209ae96 - Style issues
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18188
diff changeset
913 };
030a2209ae96 - Style issues
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18188
diff changeset
914
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
915 static PurpleSslOps ssl_ops =
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
916 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
917 ssl_gnutls_init,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
918 ssl_gnutls_uninit,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
919 ssl_gnutls_connect,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
920 ssl_gnutls_close,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
921 ssl_gnutls_read,
16665
6531f1a2e1d7 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 15822
diff changeset
922 ssl_gnutls_write,
18187
33690062e8b3 - Expose get_peer_certificates in the SslOps struct, and modify gnutls
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18186
diff changeset
923 ssl_gnutls_get_peer_certificates,
16665
6531f1a2e1d7 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 15822
diff changeset
924
6531f1a2e1d7 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 15822
diff changeset
925 /* padding */
6531f1a2e1d7 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 15822
diff changeset
926 NULL,
6531f1a2e1d7 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 15822
diff changeset
927 NULL,
6531f1a2e1d7 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 15822
diff changeset
928 NULL
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
929 };
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
930
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
931 #endif /* HAVE_GNUTLS */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
932
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
933 static gboolean
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
934 plugin_load(PurplePlugin *plugin)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
935 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
936 #ifdef HAVE_GNUTLS
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
937 if(!purple_ssl_get_ops()) {
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
938 purple_ssl_set_ops(&ssl_ops);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
939 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
940
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
941 /* Init GNUTLS now so others can use it even if sslconn never does */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
942 ssl_gnutls_init_gnutls();
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
943
19215
ab91044a914e - Move ssl-gnutls x509 registration until after GnuTLS itself is inited
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19212
diff changeset
944 /* Register that we're providing an X.509 CertScheme */
ab91044a914e - Move ssl-gnutls x509 registration until after GnuTLS itself is inited
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19212
diff changeset
945 purple_certificate_register_scheme( &x509_gnutls );
ab91044a914e - Move ssl-gnutls x509 registration until after GnuTLS itself is inited
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19212
diff changeset
946
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
947 return TRUE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
948 #else
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
949 return FALSE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
950 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
951 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
952
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
953 static gboolean
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
954 plugin_unload(PurplePlugin *plugin)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
955 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
956 #ifdef HAVE_GNUTLS
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
957 if(purple_ssl_get_ops() == &ssl_ops) {
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
958 purple_ssl_set_ops(NULL);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
959 }
18927
9abc911c65aa - GnuTLS plugin registers an x509 certscheme now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18191
diff changeset
960
9abc911c65aa - GnuTLS plugin registers an x509 certscheme now
William Ehlhardt <williamehlhardt@gmail.com>
parents: 18191
diff changeset
961 purple_certificate_unregister_scheme( &x509_gnutls );
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
962 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
963
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
964 return TRUE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
965 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
966
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
967 static PurplePluginInfo info =
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
968 {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
969 PURPLE_PLUGIN_MAGIC,
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
970 PURPLE_MAJOR_VERSION,
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
971 PURPLE_MINOR_VERSION,
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
972 PURPLE_PLUGIN_STANDARD, /**< type */
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
973 NULL, /**< ui_requirement */
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
974 PURPLE_PLUGIN_FLAG_INVISIBLE, /**< flags */
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
975 NULL, /**< dependencies */
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
976 PURPLE_PRIORITY_DEFAULT, /**< priority */
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
977
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
978 SSL_GNUTLS_PLUGIN_ID, /**< id */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
979 N_("GNUTLS"), /**< name */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
980 VERSION, /**< version */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
981 /** summary */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
982 N_("Provides SSL support through GNUTLS."),
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
983 /** description */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
984 N_("Provides SSL support through GNUTLS."),
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
985 "Christian Hammond <chipx86@gnupdate.org>",
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
986 PURPLE_WEBSITE, /**< homepage */
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
987
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
988 plugin_load, /**< load */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
989 plugin_unload, /**< unload */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
990 NULL, /**< destroy */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
991
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
992 NULL, /**< ui_info */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
993 NULL, /**< extra_info */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
994 NULL, /**< prefs_info */
16665
6531f1a2e1d7 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 15822
diff changeset
995 NULL, /**< actions */
6531f1a2e1d7 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 15822
diff changeset
996
6531f1a2e1d7 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 15822
diff changeset
997 /* padding */
6531f1a2e1d7 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 15822
diff changeset
998 NULL,
6531f1a2e1d7 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 15822
diff changeset
999 NULL,
6531f1a2e1d7 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 15822
diff changeset
1000 NULL,
6531f1a2e1d7 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 15822
diff changeset
1001 NULL
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1002 };
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1003
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1004 static void
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
1005 init_plugin(PurplePlugin *plugin)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1006 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1007 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1008
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15784
diff changeset
1009 PURPLE_INIT_PLUGIN(ssl_gnutls, init_plugin, info)