libpurple/plugins/ssl/ssl-nss.c

Mon, 24 Nov 2008 00:40:57 +0000

author
Florian Quèze <florian@instantbird.org>
date
Mon, 24 Nov 2008 00:40:57 +0000
changeset 24759
9f88e2d42845
parent 24577
fdb8b167200e
child 27692
6939005c2ed2
permissions
-rw-r--r--

Prevent the Buddy State Notification plugin from printing duplicate
notifications when the same buddy is in multiple groups on protocols which
support it. Also prevent autolinkification of JID's, MSN passport addresses,
etc. in the notification messages. Fixes #7609.


committer: John Bailey <rekkanoryo@rekkanoryo.org>

7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1 /**
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2 * @file ssl-nss.c Mozilla NSS SSL plugin.
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
4 * purple
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
5 *
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
6 * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org>
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
7 *
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 * (at your option) any later version.
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 *
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 * GNU General Public License for more details.
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 *
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19847
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21 */
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
22 #include "internal.h"
7051
8ddb8f560399 [gaim-migrate @ 7614]
Christian Hammond <chipx86@chipx86.com>
parents: 7050
diff changeset
23 #include "debug.h"
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
24 #include "certificate.h"
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
25 #include "plugin.h"
7051
8ddb8f560399 [gaim-migrate @ 7614]
Christian Hammond <chipx86@chipx86.com>
parents: 7050
diff changeset
26 #include "sslconn.h"
19983
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
27 #include "util.h"
9943
b54a762f60fa [gaim-migrate @ 10835]
Nathan Walp <nwalp@pidgin.im>
parents: 9582
diff changeset
28 #include "version.h"
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
29
7029
fe690e0607ec [gaim-migrate @ 7592]
Christian Hammond <chipx86@chipx86.com>
parents: 7028
diff changeset
30 #define SSL_NSS_PLUGIN_ID "ssl-nss"
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
31
9582
68facdf2b52d [gaim-migrate @ 10425]
Christian Hammond <chipx86@chipx86.com>
parents: 8749
diff changeset
32 #undef HAVE_LONG_LONG /* Make Mozilla less angry. If angry, Mozilla SMASH! */
68facdf2b52d [gaim-migrate @ 10425]
Christian Hammond <chipx86@chipx86.com>
parents: 8749
diff changeset
33
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
34 #include <nspr.h>
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
35 #include <nss.h>
19983
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
36 #include <nssb64.h>
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
37 #include <pk11func.h>
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
38 #include <prio.h>
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
39 #include <secerr.h>
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
40 #include <secmod.h>
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
41 #include <ssl.h>
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
42 #include <sslerr.h>
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
43 #include <sslproto.h>
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
44
17673
efba6798f37e Avoid including NSPR's private header pprio.h just for the prototype of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17623
diff changeset
45 /* This is defined in NSPR's <private/pprio.h>, but to avoid including a
efba6798f37e Avoid including NSPR's private header pprio.h just for the prototype of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17623
diff changeset
46 * private header we duplicate the prototype here */
efba6798f37e Avoid including NSPR's private header pprio.h just for the prototype of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17623
diff changeset
47 NSPR_API(PRFileDesc*) PR_ImportTCPSocket(PRInt32 osfd);
efba6798f37e Avoid including NSPR's private header pprio.h just for the prototype of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17623
diff changeset
48
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
49 typedef struct
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
50 {
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
51 PRFileDesc *fd;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
52 PRFileDesc *in;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
53 guint handshake_handler;
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
54
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
55 } PurpleSslNssData;
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
56
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
57 #define PURPLE_SSL_NSS_DATA(gsc) ((PurpleSslNssData *)gsc->private_data)
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
58
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
59 static const PRIOMethods *_nss_methods = NULL;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
60 static PRDescIdentity _identity;
24065
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
61 static PurpleCertificateScheme x509_nss;
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
62
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
63 /* Thank you, Evolution */
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
64 static void
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
65 set_errno(int code)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
66 {
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
67 /* FIXME: this should handle more. */
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
68 switch (code) {
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
69 case PR_INVALID_ARGUMENT_ERROR:
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
70 errno = EINVAL;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
71 break;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
72 case PR_PENDING_INTERRUPT_ERROR:
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
73 errno = EINTR;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
74 break;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
75 case PR_IO_PENDING_ERROR:
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
76 errno = EAGAIN;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
77 break;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
78 case PR_WOULD_BLOCK_ERROR:
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
79 errno = EAGAIN;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
80 /*errno = EWOULDBLOCK; */
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
81 break;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
82 case PR_IN_PROGRESS_ERROR:
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
83 errno = EINPROGRESS;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
84 break;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
85 case PR_ALREADY_INITIATED_ERROR:
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
86 errno = EALREADY;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
87 break;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
88 case PR_NETWORK_UNREACHABLE_ERROR:
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
89 errno = EHOSTUNREACH;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
90 break;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
91 case PR_CONNECT_REFUSED_ERROR:
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
92 errno = ECONNREFUSED;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
93 break;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
94 case PR_CONNECT_TIMEOUT_ERROR:
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
95 case PR_IO_TIMEOUT_ERROR:
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
96 errno = ETIMEDOUT;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
97 break;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
98 case PR_NOT_CONNECTED_ERROR:
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
99 errno = ENOTCONN;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
100 break;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
101 case PR_CONNECT_RESET_ERROR:
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
102 errno = ECONNRESET;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
103 break;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
104 case PR_IO_ERROR:
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
105 default:
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
106 errno = EIO;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
107 break;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
108 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
109 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
110
22104
56970903b8e9 Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents: 20288
diff changeset
111 static gchar *get_error_text(void)
19847
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
112 {
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
113 PRInt32 len = PR_GetErrorTextLength();
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
114 gchar *ret = NULL;
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
115
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
116 if (len > 0) {
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
117 ret = g_malloc(len + 1);
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
118 len = PR_GetErrorText(ret);
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
119 ret[len] = '\0';
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
120 }
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
121
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
122 return ret;
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
123 }
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
124
7993
3bfea94dd0eb [gaim-migrate @ 8670]
Christian Hammond <chipx86@chipx86.com>
parents: 7862
diff changeset
125 static void
7862
9b96706e44e7 [gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7467
diff changeset
126 ssl_nss_init_nss(void)
9b96706e44e7 [gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7467
diff changeset
127 {
10519
80801a34a246 [gaim-migrate @ 11833]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10263
diff changeset
128 char *lib;
7862
9b96706e44e7 [gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7467
diff changeset
129 PR_Init(PR_SYSTEM_THREAD, PR_PRIORITY_NORMAL, 1);
16866
2187f9250a16 Proabably fixes ticket #578, it's the recommended way of initializing NSS
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 16744
diff changeset
130 NSS_NoDB_Init(".");
7862
9b96706e44e7 [gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7467
diff changeset
131
9b96706e44e7 [gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7467
diff changeset
132 /* TODO: Fix this so autoconf does the work trying to find this lib. */
9b96706e44e7 [gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7467
diff changeset
133 #ifndef _WIN32
16158
04028f467df0 Death to Binreloc\!
Sean Egan <seanegan@pidgin.im>
parents: 15884
diff changeset
134 lib = g_strdup(LIBDIR "/libnssckbi.so");
7862
9b96706e44e7 [gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7467
diff changeset
135 #else
10519
80801a34a246 [gaim-migrate @ 11833]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10263
diff changeset
136 lib = g_strdup("nssckbi.dll");
7862
9b96706e44e7 [gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7467
diff changeset
137 #endif
10519
80801a34a246 [gaim-migrate @ 11833]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10263
diff changeset
138 SECMOD_AddNewModule("Builtins", lib, 0, 0);
80801a34a246 [gaim-migrate @ 11833]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10263
diff changeset
139 g_free(lib);
7862
9b96706e44e7 [gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7467
diff changeset
140 NSS_SetDomesticPolicy();
9b96706e44e7 [gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7467
diff changeset
141
24388
32a4cf358f9c Enable a number of default-disabled strong ciphers for NSS.
Ethan Blanton <elb@pidgin.im>
parents: 24276
diff changeset
142 SSL_CipherPrefSetDefault(TLS_DHE_RSA_WITH_AES_256_CBC_SHA, 1);
32a4cf358f9c Enable a number of default-disabled strong ciphers for NSS.
Ethan Blanton <elb@pidgin.im>
parents: 24276
diff changeset
143 SSL_CipherPrefSetDefault(TLS_DHE_DSS_WITH_AES_256_CBC_SHA, 1);
32a4cf358f9c Enable a number of default-disabled strong ciphers for NSS.
Ethan Blanton <elb@pidgin.im>
parents: 24276
diff changeset
144 SSL_CipherPrefSetDefault(TLS_RSA_WITH_AES_256_CBC_SHA, 1);
32a4cf358f9c Enable a number of default-disabled strong ciphers for NSS.
Ethan Blanton <elb@pidgin.im>
parents: 24276
diff changeset
145 SSL_CipherPrefSetDefault(TLS_DHE_DSS_WITH_RC4_128_SHA, 1);
32a4cf358f9c Enable a number of default-disabled strong ciphers for NSS.
Ethan Blanton <elb@pidgin.im>
parents: 24276
diff changeset
146 SSL_CipherPrefSetDefault(TLS_DHE_RSA_WITH_AES_128_CBC_SHA, 1);
32a4cf358f9c Enable a number of default-disabled strong ciphers for NSS.
Ethan Blanton <elb@pidgin.im>
parents: 24276
diff changeset
147 SSL_CipherPrefSetDefault(TLS_DHE_DSS_WITH_AES_128_CBC_SHA, 1);
32a4cf358f9c Enable a number of default-disabled strong ciphers for NSS.
Ethan Blanton <elb@pidgin.im>
parents: 24276
diff changeset
148 SSL_CipherPrefSetDefault(SSL_RSA_WITH_RC4_128_SHA, 1);
32a4cf358f9c Enable a number of default-disabled strong ciphers for NSS.
Ethan Blanton <elb@pidgin.im>
parents: 24276
diff changeset
149 SSL_CipherPrefSetDefault(TLS_RSA_WITH_AES_128_CBC_SHA, 1);
32a4cf358f9c Enable a number of default-disabled strong ciphers for NSS.
Ethan Blanton <elb@pidgin.im>
parents: 24276
diff changeset
150 SSL_CipherPrefSetDefault(SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, 1);
32a4cf358f9c Enable a number of default-disabled strong ciphers for NSS.
Ethan Blanton <elb@pidgin.im>
parents: 24276
diff changeset
151 SSL_CipherPrefSetDefault(SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, 1);
32a4cf358f9c Enable a number of default-disabled strong ciphers for NSS.
Ethan Blanton <elb@pidgin.im>
parents: 24276
diff changeset
152 SSL_CipherPrefSetDefault(SSL_DHE_RSA_WITH_DES_CBC_SHA, 1);
32a4cf358f9c Enable a number of default-disabled strong ciphers for NSS.
Ethan Blanton <elb@pidgin.im>
parents: 24276
diff changeset
153 SSL_CipherPrefSetDefault(SSL_DHE_DSS_WITH_DES_CBC_SHA, 1);
32a4cf358f9c Enable a number of default-disabled strong ciphers for NSS.
Ethan Blanton <elb@pidgin.im>
parents: 24276
diff changeset
154
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
155 _identity = PR_GetUniqueIdentity("Purple");
7862
9b96706e44e7 [gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7467
diff changeset
156 _nss_methods = PR_GetDefaultIOMethods();
9b96706e44e7 [gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7467
diff changeset
157 }
9b96706e44e7 [gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7467
diff changeset
158
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
159 static SECStatus
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
160 ssl_auth_cert(void *arg, PRFileDesc *socket, PRBool checksig,
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
161 PRBool is_server)
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
162 {
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
163 return SECSuccess;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
164
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
165 #if 0
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
166 CERTCertificate *cert;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
167 void *pinArg;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
168 SECStatus status;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
169
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
170 cert = SSL_PeerCertificate(socket);
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
171 pinArg = SSL_RevealPinArg(socket);
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
172
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
173 status = CERT_VerifyCertNow((CERTCertDBHandle *)arg, cert, checksig,
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
174 certUsageSSLClient, pinArg);
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
175
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
176 if (status != SECSuccess) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
177 purple_debug_error("nss", "CERT_VerifyCertNow failed\n");
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
178 CERT_DestroyCertificate(cert);
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
179 return status;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
180 }
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
181
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
182 CERT_DestroyCertificate(cert);
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
183 return SECSuccess;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
184 #endif
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
185 }
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
186
24065
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
187 #if 0
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
188 static SECStatus
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
189 ssl_bad_cert(void *arg, PRFileDesc *socket)
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
190 {
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
191 SECStatus status = SECFailure;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
192 PRErrorCode err;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
193
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
194 if (arg == NULL)
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
195 return status;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
196
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
197 *(PRErrorCode *)arg = err = PORT_GetError();
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
198
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
199 switch (err)
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
200 {
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
201 case SEC_ERROR_INVALID_AVA:
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
202 case SEC_ERROR_INVALID_TIME:
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
203 case SEC_ERROR_BAD_SIGNATURE:
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
204 case SEC_ERROR_EXPIRED_CERTIFICATE:
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
205 case SEC_ERROR_UNKNOWN_ISSUER:
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
206 case SEC_ERROR_UNTRUSTED_CERT:
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
207 case SEC_ERROR_CERT_VALID:
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
208 case SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE:
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
209 case SEC_ERROR_CRL_EXPIRED:
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
210 case SEC_ERROR_CRL_BAD_SIGNATURE:
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
211 case SEC_ERROR_EXTENSION_VALUE_INVALID:
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
212 case SEC_ERROR_CA_CERT_INVALID:
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
213 case SEC_ERROR_CERT_USAGES_INVALID:
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
214 case SEC_ERROR_UNKNOWN_CRITICAL_EXTENSION:
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
215 status = SECSuccess;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
216 break;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
217
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
218 default:
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
219 status = SECFailure;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
220 break;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
221 }
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
222
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
223 purple_debug_error("nss", "Bad certificate: %d\n", err);
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
224
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
225 return status;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
226 }
24065
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
227 #endif
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
228
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
229 static gboolean
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
230 ssl_nss_init(void)
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
231 {
7862
9b96706e44e7 [gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7467
diff changeset
232 return TRUE;
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
233 }
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
234
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
235 static void
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
236 ssl_nss_uninit(void)
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
237 {
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
238 PR_Cleanup();
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
239
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
240 _nss_methods = NULL;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
241 }
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
242
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
243 static void
24065
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
244 ssl_nss_verified_cb(PurpleCertificateVerificationStatus st,
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
245 gpointer userdata)
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
246 {
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
247 PurpleSslConnection *gsc = (PurpleSslConnection *) userdata;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
248
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
249 if (st == PURPLE_CERTIFICATE_VALID) {
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
250 /* Certificate valid? Good! Do the connection! */
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
251 gsc->connect_cb(gsc->connect_cb_data, gsc, PURPLE_INPUT_READ);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
252 } else {
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
253 /* Otherwise, signal an error */
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
254 if(gsc->error_cb != NULL)
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
255 gsc->error_cb(gsc, PURPLE_SSL_CERTIFICATE_INVALID,
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
256 gsc->connect_cb_data);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
257 purple_ssl_close(gsc);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
258 }
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
259 }
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
260
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
261 /** Transforms an NSS containing an X.509 certificate into a Certificate instance
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
262 *
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
263 * @param cert Certificate to transform
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
264 * @return A newly allocated Certificate
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
265 */
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
266 static PurpleCertificate *
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
267 x509_import_from_nss(CERTCertificate* cert)
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
268 {
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
269 /* New certificate to return */
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
270 PurpleCertificate * crt;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
271
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
272 /* Allocate the certificate and load it with data */
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
273 crt = g_new0(PurpleCertificate, 1);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
274 crt->scheme = &x509_nss;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
275 crt->data = CERT_DupCertificate(cert);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
276
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
277 return crt;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
278 }
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
279
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
280 static GList *
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
281 ssl_nss_get_peer_certificates(PRFileDesc *socket, PurpleSslConnection * gsc)
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
282 {
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
283 CERTCertificate *curcert;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
284 CERTCertificate *issuerCert;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
285 PurpleCertificate * newcrt;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
286
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
287 /* List of Certificate instances to return */
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
288 GList * peer_certs = NULL;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
289 int count;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
290 int64 now = PR_Now();
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
291
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
292 curcert = SSL_PeerCertificate(socket);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
293 if (curcert == NULL) {
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
294 purple_debug_error("nss", "could not DupCertificate\n");
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
295 return NULL;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
296 }
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
297
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
298 for (count = 0 ; count < CERT_MAX_CERT_CHAIN ; count++) {
24276
469eea3c328d Fix a NULL pointer deref in the NSS SSL implementation with certain self-signed
Daniel Atallah <datallah@pidgin.im>
parents: 24065
diff changeset
299 purple_debug_info("nss", "subject=%s issuer=%s\n", curcert->subjectName,
469eea3c328d Fix a NULL pointer deref in the NSS SSL implementation with certain self-signed
Daniel Atallah <datallah@pidgin.im>
parents: 24065
diff changeset
300 curcert->issuerName ? curcert->issuerName : "(null)");
24065
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
301 newcrt = x509_import_from_nss(curcert);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
302 peer_certs = g_list_append(peer_certs, newcrt);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
303
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
304 if (curcert->isRoot) {
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
305 break;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
306 }
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
307 issuerCert = CERT_FindCertIssuer(curcert, now, certUsageSSLServer);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
308 if (!issuerCert) {
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
309 purple_debug_error("nss", "partial certificate chain\n");
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
310 break;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
311 }
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
312 CERT_DestroyCertificate(curcert);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
313 curcert = issuerCert;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
314 }
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
315 CERT_DestroyCertificate(curcert);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
316
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
317 return peer_certs;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
318 }
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
319
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
320 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
321 ssl_nss_handshake_cb(gpointer data, int fd, PurpleInputCondition cond)
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
322 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
323 PurpleSslConnection *gsc = (PurpleSslConnection *)data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
324 PurpleSslNssData *nss_data = gsc->private_data;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
325
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
326 /* I don't think this the best way to do this...
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
327 * It seems to work because it'll eventually use the cached value
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
328 */
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
329 if(SSL_ForceHandshake(nss_data->in) != SECSuccess) {
19847
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
330 gchar *error_txt;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
331 set_errno(PR_GetError());
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
332 if (errno == EAGAIN || errno == EWOULDBLOCK)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
333 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
334
19847
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
335 error_txt = get_error_text();
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
336 purple_debug_error("nss", "Handshake failed %s (%d)\n", error_txt ? error_txt : "", PR_GetError());
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
337 g_free(error_txt);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
338
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
339 if (gsc->error_cb != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
340 gsc->error_cb(gsc, PURPLE_SSL_HANDSHAKE_FAILED, gsc->connect_cb_data);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
341
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
342 purple_ssl_close(gsc);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
343
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
344 return;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
345 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
346
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
347 purple_input_remove(nss_data->handshake_handler);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
348 nss_data->handshake_handler = 0;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
349
24065
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
350 /* If a Verifier was given, hand control over to it */
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
351 if (gsc->verifier) {
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
352 GList *peers;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
353 /* First, get the peer cert chain */
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
354 peers = ssl_nss_get_peer_certificates(nss_data->in, gsc);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
355
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
356 /* Now kick off the verification process */
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
357 purple_certificate_verify(gsc->verifier,
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
358 gsc->host,
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
359 peers,
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
360 ssl_nss_verified_cb,
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
361 gsc);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
362
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
363 purple_certificate_destroy_list(peers);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
364 } else {
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
365 /* Otherwise, just call the "connection complete"
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
366 callback */
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
367 gsc->connect_cb(gsc->connect_cb_data, gsc, cond);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
368 }
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
369 }
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
370
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
371 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
372 ssl_nss_connect(PurpleSslConnection *gsc)
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
373 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
374 PurpleSslNssData *nss_data = g_new0(PurpleSslNssData, 1);
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
375 PRSocketOptionData socket_opt;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
376
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
377 gsc->private_data = nss_data;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
378
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
379 nss_data->fd = PR_ImportTCPSocket(gsc->fd);
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
380
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
381 if (nss_data->fd == NULL)
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
382 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
383 purple_debug_error("nss", "nss_data->fd == NULL!\n");
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
384
8362
1dc105ff1804 [gaim-migrate @ 9087]
Nathan Walp <nwalp@pidgin.im>
parents: 8360
diff changeset
385 if (gsc->error_cb != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
386 gsc->error_cb(gsc, PURPLE_SSL_CONNECT_FAILED, gsc->connect_cb_data);
8362
1dc105ff1804 [gaim-migrate @ 9087]
Nathan Walp <nwalp@pidgin.im>
parents: 8360
diff changeset
387
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
388 purple_ssl_close((PurpleSslConnection *)gsc);
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
389
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
390 return;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
391 }
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
392
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
393 socket_opt.option = PR_SockOpt_Nonblocking;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
394 socket_opt.value.non_blocking = PR_TRUE;
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
395
19847
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
396 if (PR_SetSocketOption(nss_data->fd, &socket_opt) != PR_SUCCESS) {
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
397 gchar *error_txt = get_error_text();
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
398 purple_debug_warning("nss", "unable to set socket into non-blocking mode: %s (%d)\n", error_txt ? error_txt : "", PR_GetError());
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
399 g_free(error_txt);
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
400 }
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
401
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
402 nss_data->in = SSL_ImportFD(NULL, nss_data->fd);
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
403
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
404 if (nss_data->in == NULL)
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
405 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
406 purple_debug_error("nss", "nss_data->in == NUL!\n");
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
407
8362
1dc105ff1804 [gaim-migrate @ 9087]
Nathan Walp <nwalp@pidgin.im>
parents: 8360
diff changeset
408 if (gsc->error_cb != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
409 gsc->error_cb(gsc, PURPLE_SSL_CONNECT_FAILED, gsc->connect_cb_data);
8362
1dc105ff1804 [gaim-migrate @ 9087]
Nathan Walp <nwalp@pidgin.im>
parents: 8360
diff changeset
410
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
411 purple_ssl_close((PurpleSslConnection *)gsc);
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
412
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
413 return;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
414 }
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
415
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
416 SSL_OptionSet(nss_data->in, SSL_SECURITY, PR_TRUE);
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
417 SSL_OptionSet(nss_data->in, SSL_HANDSHAKE_AS_CLIENT, PR_TRUE);
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
418
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
419 SSL_AuthCertificateHook(nss_data->in,
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
420 (SSLAuthCertificate)ssl_auth_cert,
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
421 (void *)CERT_GetDefaultCertDB());
24065
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
422 #if 0
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
423 /* No point in hooking BadCert, since ssl_auth_cert always succeeds */
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
424 SSL_BadCertHook(nss_data->in, (SSLBadCertHandler)ssl_bad_cert, NULL);
24065
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
425 #endif
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
426
7157
aad2cacc9238 [gaim-migrate @ 7724]
Nathan Walp <nwalp@pidgin.im>
parents: 7053
diff changeset
427 if(gsc->host)
aad2cacc9238 [gaim-migrate @ 7724]
Nathan Walp <nwalp@pidgin.im>
parents: 7053
diff changeset
428 SSL_SetURL(nss_data->in, gsc->host);
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
429
13264
f5db933aa42a [gaim-migrate @ 15629]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13201
diff changeset
430 #if 0
f5db933aa42a [gaim-migrate @ 15629]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13201
diff changeset
431 /* This seems like it'd the be the correct way to implement the
f5db933aa42a [gaim-migrate @ 15629]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 13201
diff changeset
432 nonblocking stuff, but it doesn't seem to work */
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
433 SSL_HandshakeCallback(nss_data->in,
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
434 (SSLHandshakeCallback) ssl_nss_handshake_cb, gsc);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
435 #endif
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
436 SSL_ResetHandshake(nss_data->in, PR_FALSE);
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
437
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
438 nss_data->handshake_handler = purple_input_add(gsc->fd,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
439 PURPLE_INPUT_READ, ssl_nss_handshake_cb, gsc);
7274
42ec5f56e32a [gaim-migrate @ 7851]
Christian Hammond <chipx86@chipx86.com>
parents: 7157
diff changeset
440
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
441 ssl_nss_handshake_cb(gsc, gsc->fd, PURPLE_INPUT_READ);
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
442 }
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
443
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
444 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
445 ssl_nss_close(PurpleSslConnection *gsc)
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
446 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
447 PurpleSslNssData *nss_data = PURPLE_SSL_NSS_DATA(gsc);
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
448
7467
a459b5408f83 [gaim-migrate @ 8080]
Nathan Walp <nwalp@pidgin.im>
parents: 7274
diff changeset
449 if(!nss_data)
a459b5408f83 [gaim-migrate @ 8080]
Nathan Walp <nwalp@pidgin.im>
parents: 7274
diff changeset
450 return;
a459b5408f83 [gaim-migrate @ 8080]
Nathan Walp <nwalp@pidgin.im>
parents: 7274
diff changeset
451
17623
4f45361d7e3b A while ago, "Paranoid" emailed devel@p.i, having noticed that purple_ssl_close() closes the ssl fd twice. I meant to commit this fix sooner, but here it is.
Daniel Atallah <datallah@pidgin.im>
parents: 16866
diff changeset
452 if (nss_data->in) {
4f45361d7e3b A while ago, "Paranoid" emailed devel@p.i, having noticed that purple_ssl_close() closes the ssl fd twice. I meant to commit this fix sooner, but here it is.
Daniel Atallah <datallah@pidgin.im>
parents: 16866
diff changeset
453 PR_Close(nss_data->in);
4f45361d7e3b A while ago, "Paranoid" emailed devel@p.i, having noticed that purple_ssl_close() closes the ssl fd twice. I meant to commit this fix sooner, but here it is.
Daniel Atallah <datallah@pidgin.im>
parents: 16866
diff changeset
454 gsc->fd = -1;
4f45361d7e3b A while ago, "Paranoid" emailed devel@p.i, having noticed that purple_ssl_close() closes the ssl fd twice. I meant to commit this fix sooner, but here it is.
Daniel Atallah <datallah@pidgin.im>
parents: 16866
diff changeset
455 } else if (nss_data->fd) {
4f45361d7e3b A while ago, "Paranoid" emailed devel@p.i, having noticed that purple_ssl_close() closes the ssl fd twice. I meant to commit this fix sooner, but here it is.
Daniel Atallah <datallah@pidgin.im>
parents: 16866
diff changeset
456 PR_Close(nss_data->fd);
4f45361d7e3b A while ago, "Paranoid" emailed devel@p.i, having noticed that purple_ssl_close() closes the ssl fd twice. I meant to commit this fix sooner, but here it is.
Daniel Atallah <datallah@pidgin.im>
parents: 16866
diff changeset
457 gsc->fd = -1;
4f45361d7e3b A while ago, "Paranoid" emailed devel@p.i, having noticed that purple_ssl_close() closes the ssl fd twice. I meant to commit this fix sooner, but here it is.
Daniel Atallah <datallah@pidgin.im>
parents: 16866
diff changeset
458 }
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
459
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
460 if (nss_data->handshake_handler)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
461 purple_input_remove(nss_data->handshake_handler);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
462
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
463 g_free(nss_data);
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
464 gsc->private_data = NULL;
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
465 }
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
466
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
467 static size_t
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
468 ssl_nss_read(PurpleSslConnection *gsc, void *data, size_t len)
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
469 {
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
470 ssize_t ret;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
471 PurpleSslNssData *nss_data = PURPLE_SSL_NSS_DATA(gsc);
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
472
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
473 ret = PR_Read(nss_data->in, data, len);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
474
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
475 if (ret == -1)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
476 set_errno(PR_GetError());
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
477
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
478 return ret;
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
479 }
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
480
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
481 static size_t
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
482 ssl_nss_write(PurpleSslConnection *gsc, const void *data, size_t len)
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
483 {
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
484 ssize_t ret;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
485 PurpleSslNssData *nss_data = PURPLE_SSL_NSS_DATA(gsc);
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
486
7467
a459b5408f83 [gaim-migrate @ 8080]
Nathan Walp <nwalp@pidgin.im>
parents: 7274
diff changeset
487 if(!nss_data)
a459b5408f83 [gaim-migrate @ 8080]
Nathan Walp <nwalp@pidgin.im>
parents: 7274
diff changeset
488 return 0;
a459b5408f83 [gaim-migrate @ 8080]
Nathan Walp <nwalp@pidgin.im>
parents: 7274
diff changeset
489
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
490 ret = PR_Write(nss_data->in, data, len);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
491
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
492 if (ret == -1)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
493 set_errno(PR_GetError());
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
494
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12209
diff changeset
495 return ret;
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
496 }
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
497
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
498 static GList *
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
499 ssl_nss_peer_certs(PurpleSslConnection *gsc)
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
500 {
20221
28e31ee832cd applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19984
diff changeset
501 #if 0
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
502 PurpleSslNssData *nss_data = PURPLE_SSL_NSS_DATA(gsc);
19847
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
503 CERTCertificate *cert;
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
504 /*
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
505 GList *chain = NULL;
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
506 void *pinArg;
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
507 SECStatus status;
19847
c53701927784 Attempt to display user readable error messages for NSS.
Daniel Atallah <datallah@pidgin.im>
parents: 19827
diff changeset
508 */
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
509
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
510 /* TODO: this is a blind guess */
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
511 cert = SSL_PeerCertificate(nss_data->fd);
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
512
20221
28e31ee832cd applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19984
diff changeset
513 if (cert)
28e31ee832cd applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19984
diff changeset
514 CERT_DestroyCertificate(cert);
28e31ee832cd applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19984
diff changeset
515 #endif
28e31ee832cd applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19984
diff changeset
516
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
517
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
518
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
519 return NULL;
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
520 }
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
521
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
522 /************************************************************************/
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
523 /* X.509 functionality */
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
524 /************************************************************************/
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
525 static PurpleCertificateScheme x509_nss;
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
526
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
527 /** Helpr macro to retrieve the NSS certdata from a PurpleCertificate */
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
528 #define X509_NSS_DATA(pcrt) ( (CERTCertificate * ) (pcrt->data) )
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
529
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
530 /** Imports a PEM-formatted X.509 certificate from the specified file.
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
531 * @param filename Filename to import from. Format is PEM
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
532 *
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
533 * @return A newly allocated Certificate structure of the x509_gnutls scheme
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
534 */
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
535 static PurpleCertificate *
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
536 x509_import_from_file(const gchar *filename)
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
537 {
19486
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
538 gchar *rawcert;
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
539 gsize len = 0;
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
540 CERTCertificate *crt_dat;
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
541 PurpleCertificate *crt;
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
542
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
543 g_return_val_if_fail(filename, NULL);
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
544
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
545 purple_debug_info("nss/x509",
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
546 "Loading certificate from %s\n",
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
547 filename);
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
548
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
549 /* Load the raw data up */
20221
28e31ee832cd applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19984
diff changeset
550 if (!g_file_get_contents(filename,
28e31ee832cd applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19984
diff changeset
551 &rawcert, &len,
28e31ee832cd applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19984
diff changeset
552 NULL)) {
28e31ee832cd applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19984
diff changeset
553 purple_debug_error("nss/x509", "Unable to read certificate file.\n");
28e31ee832cd applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19984
diff changeset
554 return NULL;
28e31ee832cd applied changes from e56db1b8a7bb8729e30fb3bf99a94ff7887fe4ec
Luke Schierer <lschiere@pidgin.im>
parents: 19984
diff changeset
555 }
19486
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
556
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
557 /* Decode the certificate */
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
558 crt_dat = CERT_DecodeCertFromPackage(rawcert, len);
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
559 g_free(rawcert);
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
560
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
561 g_return_val_if_fail(crt_dat, NULL);
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
562
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
563 crt = g_new0(PurpleCertificate, 1);
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
564 crt->scheme = &x509_nss;
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
565 crt->data = crt_dat;
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
566
83d0375f1784 - Add x509_import_from_file
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19485
diff changeset
567 return crt;
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
568 }
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
569
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
570 /**
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
571 * Exports a PEM-formatted X.509 certificate to the specified file.
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
572 * @param filename Filename to export to. Format will be PEM
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
573 * @param crt Certificate to export
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
574 *
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
575 * @return TRUE if success, otherwise FALSE
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
576 */
19983
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
577 /* This function should not be so complicated, but NSS doesn't seem to have a
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
578 "convert yon certificate to PEM format" function. */
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
579 static gboolean
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
580 x509_export_certificate(const gchar *filename, PurpleCertificate *crt)
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
581 {
19983
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
582 CERTCertificate *crt_dat;
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
583 SECItem *dercrt;
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
584 gchar *b64crt;
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
585 gchar *pemcrt;
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
586 gboolean ret = FALSE;
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
587
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
588 g_return_val_if_fail(filename, FALSE);
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
589 g_return_val_if_fail(crt, FALSE);
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
590 g_return_val_if_fail(crt->scheme == &x509_nss, FALSE);
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
591
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
592 crt_dat = X509_NSS_DATA(crt);
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
593 g_return_val_if_fail(crt_dat, FALSE);
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
594
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
595 purple_debug_info("nss/x509",
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
596 "Exporting certificate to %s\n", filename);
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
597
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
598 /* First, use NSS voodoo to create a DER-formatted certificate */
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
599 dercrt = SEC_ASN1EncodeItem(NULL, NULL, crt_dat,
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
600 SEC_ASN1_GET(SEC_SignedCertificateTemplate));
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
601 g_return_val_if_fail(dercrt != NULL, FALSE);
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
602
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
603 /* Now encode it to b64 */
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
604 b64crt = NSSBase64_EncodeItem(NULL, NULL, 0, dercrt);
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
605 SECITEM_FreeItem(dercrt, PR_TRUE);
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
606 g_return_val_if_fail(b64crt, FALSE);
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
607
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
608 /* Wrap it in nice PEM header things */
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
609 pemcrt = g_strdup_printf("-----BEGIN CERTIFICATE-----\n%s\n-----END CERTIFICATE-----\n", b64crt);
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
610 PORT_Free(b64crt); /* Notice that b64crt was allocated by an NSS
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
611 function; hence, we'll let NSPR free it. */
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
612
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
613 /* Finally, dump the silly thing to a file. */
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
614 ret = purple_util_write_data_to_file_absolute(filename, pemcrt, -1);
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
615
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
616 g_free(pemcrt);
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
617
2d79626570ae - Make ssl-nss x509_export_certificate work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19982
diff changeset
618 return ret;
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
619 }
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
620
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
621 static PurpleCertificate *
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
622 x509_copy_certificate(PurpleCertificate *crt)
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
623 {
19009
01fe9523e6d6 - x509_nss copy op
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
624 CERTCertificate *crt_dat;
01fe9523e6d6 - x509_nss copy op
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
625 PurpleCertificate *newcrt;
01fe9523e6d6 - x509_nss copy op
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
626
01fe9523e6d6 - x509_nss copy op
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
627 g_return_val_if_fail(crt, NULL);
01fe9523e6d6 - x509_nss copy op
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
628 g_return_val_if_fail(crt->scheme == &x509_nss, NULL);
01fe9523e6d6 - x509_nss copy op
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
629
01fe9523e6d6 - x509_nss copy op
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
630 crt_dat = X509_NSS_DATA(crt);
01fe9523e6d6 - x509_nss copy op
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
631 g_return_val_if_fail(crt_dat, NULL);
01fe9523e6d6 - x509_nss copy op
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
632
01fe9523e6d6 - x509_nss copy op
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
633 /* Create the certificate copy */
01fe9523e6d6 - x509_nss copy op
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
634 newcrt = g_new0(PurpleCertificate, 1);
01fe9523e6d6 - x509_nss copy op
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
635 newcrt->scheme = &x509_nss;
19023
547e94194c7a - Comment on NSS's refcounting prowess
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19014
diff changeset
636 /* NSS does refcounting automatically */
19009
01fe9523e6d6 - x509_nss copy op
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
637 newcrt->data = CERT_DupCertificate(crt_dat);
01fe9523e6d6 - x509_nss copy op
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
638
01fe9523e6d6 - x509_nss copy op
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19008
diff changeset
639 return newcrt;
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
640 }
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
641
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
642 /** Frees a Certificate
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
643 *
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
644 * Destroys a Certificate's internal data structures and frees the pointer
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
645 * given.
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
646 * @param crt Certificate instance to be destroyed. It WILL NOT be destroyed
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
647 * if it is not of the correct CertificateScheme. Can be NULL
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
648 *
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
649 */
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
650 static void
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
651 x509_destroy_certificate(PurpleCertificate * crt)
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
652 {
19010
ad839d846fae - x509_nss destroy_certificate
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19009
diff changeset
653 CERTCertificate *crt_dat;
ad839d846fae - x509_nss destroy_certificate
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19009
diff changeset
654
ad839d846fae - x509_nss destroy_certificate
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19009
diff changeset
655 g_return_if_fail(crt);
ad839d846fae - x509_nss destroy_certificate
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19009
diff changeset
656 g_return_if_fail(crt->scheme == &x509_nss);
ad839d846fae - x509_nss destroy_certificate
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19009
diff changeset
657
ad839d846fae - x509_nss destroy_certificate
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19009
diff changeset
658 crt_dat = X509_NSS_DATA(crt);
ad839d846fae - x509_nss destroy_certificate
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19009
diff changeset
659 g_return_if_fail(crt_dat);
ad839d846fae - x509_nss destroy_certificate
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19009
diff changeset
660
ad839d846fae - x509_nss destroy_certificate
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19009
diff changeset
661 /* Finally we have the certificate. So let's kill it */
19023
547e94194c7a - Comment on NSS's refcounting prowess
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19014
diff changeset
662 /* NSS does refcounting automatically */
19010
ad839d846fae - x509_nss destroy_certificate
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19009
diff changeset
663 CERT_DestroyCertificate(crt_dat);
19027
921b7e331382 - x509_destroy_certificate is supposed to free the PurpleCertificate
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19023
diff changeset
664
921b7e331382 - x509_destroy_certificate is supposed to free the PurpleCertificate
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19023
diff changeset
665 /* Delete the PurpleCertificate as well */
921b7e331382 - x509_destroy_certificate is supposed to free the PurpleCertificate
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19023
diff changeset
666 g_free(crt);
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
667 }
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
668
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
669 /** Determines whether one certificate has been issued and signed by another
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
670 *
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
671 * @param crt Certificate to check the signature of
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
672 * @param issuer Issuer's certificate
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
673 *
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
674 * @return TRUE if crt was signed and issued by issuer, otherwise FALSE
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
675 * @TODO Modify this function to return a reason for invalidity?
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
676 */
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
677 static gboolean
19980
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
678 x509_signed_by(PurpleCertificate * crt,
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
679 PurpleCertificate * issuer)
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
680 {
24065
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
681 CERTCertificate *subjectCert;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
682 CERTCertificate *issuerCert;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
683 SECStatus st;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
684
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
685 issuerCert = X509_NSS_DATA(issuer);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
686 g_return_val_if_fail(issuerCert, FALSE);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
687
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
688 subjectCert = X509_NSS_DATA(crt);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
689 g_return_val_if_fail(subjectCert, FALSE);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
690
24276
469eea3c328d Fix a NULL pointer deref in the NSS SSL implementation with certain self-signed
Daniel Atallah <datallah@pidgin.im>
parents: 24065
diff changeset
691 if (subjectCert->issuerName == NULL
469eea3c328d Fix a NULL pointer deref in the NSS SSL implementation with certain self-signed
Daniel Atallah <datallah@pidgin.im>
parents: 24065
diff changeset
692 || PORT_Strcmp(subjectCert->issuerName, issuerCert->subjectName) != 0)
24065
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
693 return FALSE;
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
694 st = CERT_VerifySignedData(&subjectCert->signatureWrap, issuerCert, PR_Now(), NULL);
bfc4c0035d91 Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 22104
diff changeset
695 return st == SECSuccess;
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
696 }
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
697
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
698 static GByteArray *
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
699 x509_sha1sum(PurpleCertificate *crt)
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
700 {
19014
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
701 CERTCertificate *crt_dat;
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
702 size_t hashlen = 20; /* Size of an sha1sum */
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
703 GByteArray *sha1sum;
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
704 SECItem *derCert; /* DER representation of the cert */
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
705 SECStatus st;
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
706
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
707 g_return_val_if_fail(crt, NULL);
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
708 g_return_val_if_fail(crt->scheme == &x509_nss, NULL);
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
709
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
710 crt_dat = X509_NSS_DATA(crt);
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
711 g_return_val_if_fail(crt_dat, NULL);
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
712
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
713 /* Get the certificate DER representation */
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
714 derCert = &(crt_dat->derCert);
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
715
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
716 /* Make a hash! */
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
717 sha1sum = g_byte_array_sized_new(hashlen);
19797
92736e34b16a - ssl-nss now reports a certificate's sha1sum correctly
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19671
diff changeset
718 /* glib leaves the size as 0 by default */
92736e34b16a - ssl-nss now reports a certificate's sha1sum correctly
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19671
diff changeset
719 sha1sum->len = hashlen;
92736e34b16a - ssl-nss now reports a certificate's sha1sum correctly
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19671
diff changeset
720
19014
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
721 st = PK11_HashBuf(SEC_OID_SHA1, sha1sum->data,
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
722 derCert->data, derCert->len);
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
723
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
724 /* Check for errors */
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
725 if (st != SECSuccess) {
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
726 g_byte_array_free(sha1sum, TRUE);
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
727 purple_debug_error("nss/x509",
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
728 "Error: hashing failed!\n");
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
729 return NULL;
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
730 }
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
731
1a67cc27fb12 - x509_nss sha1sum
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19013
diff changeset
732 return sha1sum;
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
733 }
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
734
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
735 static gchar *
19980
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
736 x509_dn (PurpleCertificate *crt)
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
737 {
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
738 CERTCertificate *crt_dat;
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
739
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
740 g_return_val_if_fail(crt, NULL);
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
741 g_return_val_if_fail(crt->scheme == &x509_nss, NULL);
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
742
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
743 crt_dat = X509_NSS_DATA(crt);
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
744 g_return_val_if_fail(crt_dat, NULL);
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
745
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
746 return g_strdup(crt_dat->subjectName);
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
747 }
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
748
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
749 static gchar *
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
750 x509_issuer_dn (PurpleCertificate *crt)
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
751 {
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
752 CERTCertificate *crt_dat;
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
753
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
754 g_return_val_if_fail(crt, NULL);
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
755 g_return_val_if_fail(crt->scheme == &x509_nss, NULL);
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
756
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
757 crt_dat = X509_NSS_DATA(crt);
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
758 g_return_val_if_fail(crt_dat, NULL);
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
759
24577
fdb8b167200e x509_issuer_dn() should return the certificate's issuer name, not the cert
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 24513
diff changeset
760 return g_strdup(crt_dat->issuerName);
19980
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
761 }
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
762
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
763 static gchar *
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
764 x509_common_name (PurpleCertificate *crt)
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
765 {
19011
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
766 CERTCertificate *crt_dat;
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
767 char *nss_cn;
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
768 gchar *ret_cn;
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
769
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
770 g_return_val_if_fail(crt, NULL);
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
771 g_return_val_if_fail(crt->scheme == &x509_nss, NULL);
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
772
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
773 crt_dat = X509_NSS_DATA(crt);
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
774 g_return_val_if_fail(crt_dat, NULL);
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
775
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
776 /* Q:
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
777 Why get a newly allocated string out of NSS, strdup it, and then
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
778 return the new copy?
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
779
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
780 A:
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
781 The NSS LXR docs state that I should use the NSPR free functions on
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
782 the strings that the NSS cert functions return. Since the libpurple
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
783 API expects a g_free()-able string, we make our own copy and return
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
784 that.
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
785
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
786 NSPR is something of a prima donna. */
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
787
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
788 nss_cn = CERT_GetCommonName( &(crt_dat->subject) );
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
789 ret_cn = g_strdup(nss_cn);
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
790 PORT_Free(nss_cn);
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
791
21cdaee203e8 - x509_nss get_subject_name (x509_common_name)
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19010
diff changeset
792 return ret_cn;
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
793 }
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
794
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
795 static gboolean
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
796 x509_check_name (PurpleCertificate *crt, const gchar *name)
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
797 {
19012
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
798 CERTCertificate *crt_dat;
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
799 SECStatus st;
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
800
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
801 g_return_val_if_fail(crt, FALSE);
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
802 g_return_val_if_fail(crt->scheme == &x509_nss, FALSE);
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
803
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
804 crt_dat = X509_NSS_DATA(crt);
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
805 g_return_val_if_fail(crt_dat, FALSE);
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
806
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
807 st = CERT_VerifyCertName(crt_dat, name);
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
808
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
809 if (st == SECSuccess) {
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
810 return TRUE;
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
811 }
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
812 else if (st == SECFailure) {
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
813 return FALSE;
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
814 }
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
815
7813c38f34e9 - ssl-nss x509_nss check_name
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19011
diff changeset
816 /* If we get here...bad things! */
19671
3848f6f679fd - Change g_assert to purple_debug_error
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19486
diff changeset
817 purple_debug_error("nss/x509",
3848f6f679fd - Change g_assert to purple_debug_error
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19486
diff changeset
818 "x509_check_name fell through where it shouldn't "
3848f6f679fd - Change g_assert to purple_debug_error
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19486
diff changeset
819 "have.\n");
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
820 return FALSE;
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
821 }
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
822
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
823 static gboolean
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
824 x509_times (PurpleCertificate *crt, time_t *activation, time_t *expiration)
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
825 {
19013
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
826 CERTCertificate *crt_dat;
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
827 PRTime nss_activ, nss_expir;
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
828
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
829 g_return_val_if_fail(crt, FALSE);
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
830 g_return_val_if_fail(crt->scheme == &x509_nss, FALSE);
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
831
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
832 crt_dat = X509_NSS_DATA(crt);
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
833 g_return_val_if_fail(crt_dat, FALSE);
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
834
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
835 /* Extract the times into ugly PRTime thingies */
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
836 /* TODO: Maybe this shouldn't throw an error? */
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
837 g_return_val_if_fail(
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
838 SECSuccess == CERT_GetCertTimes(crt_dat,
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
839 &nss_activ, &nss_expir),
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
840 FALSE);
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
841
19982
1b453261f6ec - Fix ssl-nss x509 to properly convert NSPR PRTime to time_t (in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19980
diff changeset
842 /* NSS's native PRTime type *almost* corresponds to time_t; however,
1b453261f6ec - Fix ssl-nss x509 to properly convert NSPR PRTime to time_t (in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19980
diff changeset
843 it measures *microseconds* since the epoch, not seconds. Hence
1b453261f6ec - Fix ssl-nss x509 to properly convert NSPR PRTime to time_t (in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19980
diff changeset
844 the funny conversion. */
19013
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
845 if (activation) {
19982
1b453261f6ec - Fix ssl-nss x509 to properly convert NSPR PRTime to time_t (in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19980
diff changeset
846 *activation = nss_activ / 1000000;
19013
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
847 }
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
848 if (expiration) {
19982
1b453261f6ec - Fix ssl-nss x509 to properly convert NSPR PRTime to time_t (in
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19980
diff changeset
849 *expiration = nss_expir / 1000000;
19013
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
850 }
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
851
60c74d9597f3 - x509_nss get_times
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19012
diff changeset
852 return TRUE;
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
853 }
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
854
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
855 static PurpleCertificateScheme x509_nss = {
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
856 "x509", /* Scheme name */
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
857 N_("X.509 Certificates"), /* User-visible scheme name */
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
858 x509_import_from_file, /* Certificate import function */
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
859 x509_export_certificate, /* Certificate export function */
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
860 x509_copy_certificate, /* Copy */
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
861 x509_destroy_certificate, /* Destroy cert */
19980
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
862 x509_signed_by, /* Signed-by */
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
863 x509_sha1sum, /* SHA1 fingerprint */
19980
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
864 x509_dn, /* Unique ID */
35d5d780ba42 - Make ssl-nss unique_id and issuer_unique_id work
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19859
diff changeset
865 x509_issuer_dn, /* Issuer Unique ID */
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
866 x509_common_name, /* Subject name */
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
867 x509_check_name, /* Check subject name */
19827
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19797
diff changeset
868 x509_times, /* Activation/Expiration time */
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19797
diff changeset
869
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19797
diff changeset
870 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19797
diff changeset
871 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19797
diff changeset
872 NULL,
62c3805f723e - Add purple_reserved fields to various structures.
William Ehlhardt <williamehlhardt@gmail.com>
parents: 19797
diff changeset
873 NULL
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
874 };
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
875
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
876 static PurpleSslOps ssl_ops =
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
877 {
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
878 ssl_nss_init,
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
879 ssl_nss_uninit,
14222
71d8761db708 [gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents: 13530
diff changeset
880 ssl_nss_connect,
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
881 ssl_nss_close,
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
882 ssl_nss_read,
16744
fcdab37ba1c2 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 16158
diff changeset
883 ssl_nss_write,
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
884 ssl_nss_peer_certs,
16744
fcdab37ba1c2 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 16158
diff changeset
885
fcdab37ba1c2 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 16158
diff changeset
886 /* padding */
fcdab37ba1c2 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 16158
diff changeset
887 NULL,
fcdab37ba1c2 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 16158
diff changeset
888 NULL,
fcdab37ba1c2 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 16158
diff changeset
889 NULL
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
890 };
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
891
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
892
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
893 static gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
894 plugin_load(PurplePlugin *plugin)
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
895 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
896 if (!purple_ssl_get_ops()) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
897 purple_ssl_set_ops(&ssl_ops);
7862
9b96706e44e7 [gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7467
diff changeset
898 }
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
899
11033
dc68e074f10d [gaim-migrate @ 12919]
Etan Reisner <deryni@pidgin.im>
parents: 10519
diff changeset
900 /* Init NSS now, so others can use it even if sslconn never does */
dc68e074f10d [gaim-migrate @ 12919]
Etan Reisner <deryni@pidgin.im>
parents: 10519
diff changeset
901 ssl_nss_init_nss();
dc68e074f10d [gaim-migrate @ 12919]
Etan Reisner <deryni@pidgin.im>
parents: 10519
diff changeset
902
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
903 /* Register the X.509 functions we provide */
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
904 purple_certificate_register_scheme(&x509_nss);
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
905
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
906 return TRUE;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
907 }
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
908
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
909 static gboolean
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
910 plugin_unload(PurplePlugin *plugin)
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
911 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
912 if (purple_ssl_get_ops() == &ssl_ops) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
913 purple_ssl_set_ops(NULL);
7862
9b96706e44e7 [gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents: 7467
diff changeset
914 }
19008
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
915
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
916 /* Unregister our X.509 functions */
222e4861b5a2 - Skeleton for ssl-nss x509 provider
William Ehlhardt <williamehlhardt@gmail.com>
parents: 17673
diff changeset
917 purple_certificate_unregister_scheme(&x509_nss);
7050
12730863b0f9 [gaim-migrate @ 7613]
Christian Hammond <chipx86@chipx86.com>
parents: 7029
diff changeset
918
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
919 return TRUE;
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
920 }
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
921
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
922 static PurplePluginInfo info =
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
923 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
924 PURPLE_PLUGIN_MAGIC,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
925 PURPLE_MAJOR_VERSION,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
926 PURPLE_MINOR_VERSION,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
927 PURPLE_PLUGIN_STANDARD, /**< type */
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
928 NULL, /**< ui_requirement */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
929 PURPLE_PLUGIN_FLAG_INVISIBLE, /**< flags */
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
930 NULL, /**< dependencies */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
931 PURPLE_PRIORITY_DEFAULT, /**< priority */
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
932
7029
fe690e0607ec [gaim-migrate @ 7592]
Christian Hammond <chipx86@chipx86.com>
parents: 7028
diff changeset
933 SSL_NSS_PLUGIN_ID, /**< id */
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
934 N_("NSS"), /**< name */
20288
5ca925a094e2 applied changes from 03b709ec2a153e7e82719df0ba4635108bb1d3c6
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 20221
diff changeset
935 DISPLAY_VERSION, /**< version */
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
936 /** summary */
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
937 N_("Provides SSL support through Mozilla NSS."),
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
938 /** description */
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
939 N_("Provides SSL support through Mozilla NSS."),
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
940 "Christian Hammond <chipx86@gnupdate.org>",
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
941 PURPLE_WEBSITE, /**< homepage */
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
942
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
943 plugin_load, /**< load */
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
944 plugin_unload, /**< unload */
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
945 NULL, /**< destroy */
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
946
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
947 NULL, /**< ui_info */
11513
89bf8d856291 [gaim-migrate @ 13758]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11256
diff changeset
948 NULL, /**< extra_info */
89bf8d856291 [gaim-migrate @ 13758]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11256
diff changeset
949 NULL, /**< prefs_info */
16744
fcdab37ba1c2 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 16158
diff changeset
950 NULL, /**< actions */
fcdab37ba1c2 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 16158
diff changeset
951
fcdab37ba1c2 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 16158
diff changeset
952 /* padding */
fcdab37ba1c2 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 16158
diff changeset
953 NULL,
fcdab37ba1c2 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 16158
diff changeset
954 NULL,
fcdab37ba1c2 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 16158
diff changeset
955 NULL,
fcdab37ba1c2 Added NULL pads to ssl stuff
Gary Kramlich <grim@reaperworld.com>
parents: 16158
diff changeset
956 NULL
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
957 };
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
958
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
959 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
960 init_plugin(PurplePlugin *plugin)
7016
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
961 {
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
962 }
895a5ff9ebd4 [gaim-migrate @ 7579]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
963
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
964 PURPLE_INIT_PLUGIN(ssl_nss, init_plugin, info)

mercurial