Mon, 24 Nov 2008 00:40:57 +0000
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 | 1 | /** |
| 2 | * @file ssl-nss.c Mozilla NSS SSL plugin. | |
| 3 | * | |
| 15884 | 4 | * purple |
| 7016 | 5 | * |
| 6 | * Copyright (C) 2003 Christian Hammond <chipx86@gnupdate.org> | |
| 7 | * | |
| 8 | * This program is free software; you can redistribute it and/or modify | |
| 9 | * it under the terms of the GNU General Public License as published by | |
| 10 | * the Free Software Foundation; either version 2 of the License, or | |
| 11 | * (at your option) any later version. | |
| 12 | * | |
| 13 | * This program is distributed in the hope that it will be useful, | |
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 | * GNU General Public License for more details. | |
| 17 | * | |
| 18 | * You should have received a copy of the GNU General Public License | |
| 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 | 21 | */ |
| 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 | 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 | 28 | #include "version.h" |
| 7016 | 29 | |
|
7029
fe690e0607ec
[gaim-migrate @ 7592]
Christian Hammond <chipx86@chipx86.com>
parents:
7028
diff
changeset
|
30 | #define SSL_NSS_PLUGIN_ID "ssl-nss" |
| 7016 | 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 | 34 | #include <nspr.h> |
| 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 | 37 | #include <pk11func.h> |
| 38 | #include <prio.h> | |
| 39 | #include <secerr.h> | |
| 40 | #include <secmod.h> | |
| 41 | #include <ssl.h> | |
| 42 | #include <sslerr.h> | |
| 43 | #include <sslproto.h> | |
| 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 | 49 | typedef struct |
| 50 | { | |
| 51 | PRFileDesc *fd; | |
| 52 | PRFileDesc *in; | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12209
diff
changeset
|
53 | guint handshake_handler; |
| 7016 | 54 | |
| 15884 | 55 | } PurpleSslNssData; |
| 7016 | 56 | |
| 15884 | 57 | #define PURPLE_SSL_NSS_DATA(gsc) ((PurpleSslNssData *)gsc->private_data) |
| 7016 | 58 | |
| 59 | static const PRIOMethods *_nss_methods = NULL; | |
| 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 | 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 | 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 | 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 | 159 | static SECStatus |
| 160 | ssl_auth_cert(void *arg, PRFileDesc *socket, PRBool checksig, | |
| 161 | PRBool is_server) | |
| 162 | { | |
| 163 | return SECSuccess; | |
| 164 | ||
| 165 | #if 0 | |
| 166 | CERTCertificate *cert; | |
| 167 | void *pinArg; | |
| 168 | SECStatus status; | |
| 169 | ||
| 170 | cert = SSL_PeerCertificate(socket); | |
| 171 | pinArg = SSL_RevealPinArg(socket); | |
| 172 | ||
| 173 | status = CERT_VerifyCertNow((CERTCertDBHandle *)arg, cert, checksig, | |
| 174 | certUsageSSLClient, pinArg); | |
| 175 | ||
| 176 | if (status != SECSuccess) { | |
| 15884 | 177 | purple_debug_error("nss", "CERT_VerifyCertNow failed\n"); |
| 7016 | 178 | CERT_DestroyCertificate(cert); |
| 179 | return status; | |
| 180 | } | |
| 181 | ||
| 182 | CERT_DestroyCertificate(cert); | |
| 183 | return SECSuccess; | |
| 184 | #endif | |
| 185 | } | |
| 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 | 188 | static SECStatus |
| 189 | ssl_bad_cert(void *arg, PRFileDesc *socket) | |
| 190 | { | |
| 191 | SECStatus status = SECFailure; | |
| 192 | PRErrorCode err; | |
| 193 | ||
| 194 | if (arg == NULL) | |
| 195 | return status; | |
| 196 | ||
| 197 | *(PRErrorCode *)arg = err = PORT_GetError(); | |
| 198 | ||
| 199 | switch (err) | |
| 200 | { | |
| 201 | case SEC_ERROR_INVALID_AVA: | |
| 202 | case SEC_ERROR_INVALID_TIME: | |
| 203 | case SEC_ERROR_BAD_SIGNATURE: | |
| 204 | case SEC_ERROR_EXPIRED_CERTIFICATE: | |
| 205 | case SEC_ERROR_UNKNOWN_ISSUER: | |
| 206 | case SEC_ERROR_UNTRUSTED_CERT: | |
| 207 | case SEC_ERROR_CERT_VALID: | |
| 208 | case SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE: | |
| 209 | case SEC_ERROR_CRL_EXPIRED: | |
| 210 | case SEC_ERROR_CRL_BAD_SIGNATURE: | |
| 211 | case SEC_ERROR_EXTENSION_VALUE_INVALID: | |
| 212 | case SEC_ERROR_CA_CERT_INVALID: | |
| 213 | case SEC_ERROR_CERT_USAGES_INVALID: | |
| 214 | case SEC_ERROR_UNKNOWN_CRITICAL_EXTENSION: | |
| 215 | status = SECSuccess; | |
| 216 | break; | |
| 217 | ||
| 218 | default: | |
| 219 | status = SECFailure; | |
| 220 | break; | |
| 221 | } | |
| 222 | ||
| 15884 | 223 | purple_debug_error("nss", "Bad certificate: %d\n", err); |
| 7016 | 224 | |
| 225 | return status; | |
| 226 | } | |
|
24065
bfc4c0035d91
Patch to fully enable NSS SSL Certificates from #6500.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
22104
diff
changeset
|
227 | #endif |
| 7016 | 228 | |
| 229 | static gboolean | |
| 230 | ssl_nss_init(void) | |
| 231 | { | |
|
7862
9b96706e44e7
[gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents:
7467
diff
changeset
|
232 | return TRUE; |
| 7016 | 233 | } |
| 234 | ||
| 235 | static void | |
| 236 | ssl_nss_uninit(void) | |
| 237 | { | |
| 238 | PR_Cleanup(); | |
| 239 | ||
| 240 | _nss_methods = NULL; | |
| 241 | } | |
| 242 | ||
| 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 | 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 | 323 | PurpleSslConnection *gsc = (PurpleSslConnection *)data; |
| 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 | 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 | 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 | 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 | 372 | ssl_nss_connect(PurpleSslConnection *gsc) |
| 7016 | 373 | { |
| 15884 | 374 | PurpleSslNssData *nss_data = g_new0(PurpleSslNssData, 1); |
| 7016 | 375 | PRSocketOptionData socket_opt; |
| 376 | ||
| 377 | gsc->private_data = nss_data; | |
| 378 | ||
| 379 | nss_data->fd = PR_ImportTCPSocket(gsc->fd); | |
| 380 | ||
| 381 | if (nss_data->fd == NULL) | |
| 382 | { | |
| 15884 | 383 | purple_debug_error("nss", "nss_data->fd == NULL!\n"); |
| 7016 | 384 | |
| 8362 | 385 | if (gsc->error_cb != NULL) |
| 15884 | 386 | gsc->error_cb(gsc, PURPLE_SSL_CONNECT_FAILED, gsc->connect_cb_data); |
| 8362 | 387 | |
| 15884 | 388 | purple_ssl_close((PurpleSslConnection *)gsc); |
| 7016 | 389 | |
| 390 | return; | |
| 391 | } | |
| 392 | ||
| 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 | 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 | 401 | |
| 402 | nss_data->in = SSL_ImportFD(NULL, nss_data->fd); | |
| 403 | ||
| 404 | if (nss_data->in == NULL) | |
| 405 | { | |
| 15884 | 406 | purple_debug_error("nss", "nss_data->in == NUL!\n"); |
| 7016 | 407 | |
| 8362 | 408 | if (gsc->error_cb != NULL) |
| 15884 | 409 | gsc->error_cb(gsc, PURPLE_SSL_CONNECT_FAILED, gsc->connect_cb_data); |
| 8362 | 410 | |
| 15884 | 411 | purple_ssl_close((PurpleSslConnection *)gsc); |
| 7016 | 412 | |
| 413 | return; | |
| 414 | } | |
| 415 | ||
| 416 | SSL_OptionSet(nss_data->in, SSL_SECURITY, PR_TRUE); | |
| 417 | SSL_OptionSet(nss_data->in, SSL_HANDSHAKE_AS_CLIENT, PR_TRUE); | |
| 418 | ||
| 419 | SSL_AuthCertificateHook(nss_data->in, | |
| 420 | (SSLAuthCertificate)ssl_auth_cert, | |
| 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 | 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 | 426 | |
| 7157 | 427 | if(gsc->host) |
| 428 | SSL_SetURL(nss_data->in, gsc->host); | |
| 7016 | 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 | 436 | SSL_ResetHandshake(nss_data->in, PR_FALSE); |
| 437 | ||
| 15884 | 438 | nss_data->handshake_handler = purple_input_add(gsc->fd, |
| 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 | 441 | ssl_nss_handshake_cb(gsc, gsc->fd, PURPLE_INPUT_READ); |
| 7016 | 442 | } |
| 443 | ||
| 444 | static void | |
| 15884 | 445 | ssl_nss_close(PurpleSslConnection *gsc) |
| 7016 | 446 | { |
| 15884 | 447 | PurpleSslNssData *nss_data = PURPLE_SSL_NSS_DATA(gsc); |
| 7016 | 448 | |
| 7467 | 449 | if(!nss_data) |
| 450 | return; | |
| 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 | 459 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12209
diff
changeset
|
460 | if (nss_data->handshake_handler) |
| 15884 | 461 | purple_input_remove(nss_data->handshake_handler); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12209
diff
changeset
|
462 | |
| 7016 | 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 | 465 | } |
| 466 | ||
| 467 | static size_t | |
| 15884 | 468 | ssl_nss_read(PurpleSslConnection *gsc, void *data, size_t len) |
| 7016 | 469 | { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12209
diff
changeset
|
470 | ssize_t ret; |
| 15884 | 471 | PurpleSslNssData *nss_data = PURPLE_SSL_NSS_DATA(gsc); |
| 7016 | 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 | 479 | } |
| 480 | ||
| 481 | static size_t | |
| 15884 | 482 | ssl_nss_write(PurpleSslConnection *gsc, const void *data, size_t len) |
| 7016 | 483 | { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12209
diff
changeset
|
484 | ssize_t ret; |
| 15884 | 485 | PurpleSslNssData *nss_data = PURPLE_SSL_NSS_DATA(gsc); |
| 7016 | 486 | |
| 7467 | 487 | if(!nss_data) |
| 488 | return 0; | |
| 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 | 496 | } |
| 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 | 876 | static PurpleSslOps ssl_ops = |
| 7016 | 877 | { |
| 878 | ssl_nss_init, | |
| 879 | ssl_nss_uninit, | |
|
14222
71d8761db708
[gaim-migrate @ 16808]
Mark Doliner <markdoliner@pidgin.im>
parents:
13530
diff
changeset
|
880 | ssl_nss_connect, |
| 7016 | 881 | ssl_nss_close, |
| 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 | 890 | }; |
| 891 | ||
| 892 | ||
| 893 | static gboolean | |
| 15884 | 894 | plugin_load(PurplePlugin *plugin) |
| 7016 | 895 | { |
| 15884 | 896 | if (!purple_ssl_get_ops()) { |
| 897 | purple_ssl_set_ops(&ssl_ops); | |
|
7862
9b96706e44e7
[gaim-migrate @ 8516]
Bill Tompkins <obobo@users.sourceforge.net>
parents:
7467
diff
changeset
|
898 | } |
| 7016 | 899 | |
| 11033 | 900 | /* Init NSS now, so others can use it even if sslconn never does */ |
| 901 | ssl_nss_init_nss(); | |
| 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 | 906 | return TRUE; |
| 907 | } | |
| 908 | ||
| 909 | static gboolean | |
| 15884 | 910 | plugin_unload(PurplePlugin *plugin) |
| 7016 | 911 | { |
| 15884 | 912 | if (purple_ssl_get_ops() == &ssl_ops) { |
| 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 | 919 | return TRUE; |
| 920 | } | |
| 921 | ||
| 15884 | 922 | static PurplePluginInfo info = |
| 7016 | 923 | { |
| 15884 | 924 | PURPLE_PLUGIN_MAGIC, |
| 925 | PURPLE_MAJOR_VERSION, | |
| 926 | PURPLE_MINOR_VERSION, | |
| 927 | PURPLE_PLUGIN_STANDARD, /**< type */ | |
| 7016 | 928 | NULL, /**< ui_requirement */ |
| 15884 | 929 | PURPLE_PLUGIN_FLAG_INVISIBLE, /**< flags */ |
| 7016 | 930 | NULL, /**< dependencies */ |
| 15884 | 931 | PURPLE_PRIORITY_DEFAULT, /**< priority */ |
| 7016 | 932 | |
|
7029
fe690e0607ec
[gaim-migrate @ 7592]
Christian Hammond <chipx86@chipx86.com>
parents:
7028
diff
changeset
|
933 | SSL_NSS_PLUGIN_ID, /**< id */ |
| 7016 | 934 | N_("NSS"), /**< name */ |
|
20288
5ca925a094e2
applied changes from 03b709ec2a153e7e82719df0ba4635108bb1d3c6
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
20221
diff
changeset
|
935 | DISPLAY_VERSION, /**< version */ |
| 7016 | 936 | /** summary */ |
| 937 | N_("Provides SSL support through Mozilla NSS."), | |
| 938 | /** description */ | |
| 939 | N_("Provides SSL support through Mozilla NSS."), | |
| 940 | "Christian Hammond <chipx86@gnupdate.org>", | |
| 15884 | 941 | PURPLE_WEBSITE, /**< homepage */ |
| 7016 | 942 | |
| 943 | plugin_load, /**< load */ | |
| 944 | plugin_unload, /**< unload */ | |
| 945 | NULL, /**< destroy */ | |
| 946 | ||
| 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 | 957 | }; |
| 958 | ||
| 959 | static void | |
| 15884 | 960 | init_plugin(PurplePlugin *plugin) |
| 7016 | 961 | { |
| 962 | } | |
| 963 | ||
| 15884 | 964 | PURPLE_INIT_PLUGIN(ssl_nss, init_plugin, info) |