# HG changeset patch # User Christian Hammond # Date 1066195059 0 # Node ID b5f0aae8b5c4828f824311aa43002741741b79d5 # Parent 4fc46299e5fbfcc072c905fa3015eb7c753fa3ea [gaim-migrate @ 7847] I thought I removed these files. committer: Tailor Script diff -r 4fc46299e5fb -r b5f0aae8b5c4 src/ssl-gnutls.c --- a/src/ssl-gnutls.c Wed Oct 15 05:04:26 2003 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,161 +0,0 @@ -/** - * @file ssl-gnutls.c SSL Operations for GNUTLS - * @ingroup core - * - * gaim - * - * Copyright (C) 2003 Christian Hammond - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -#include "internal.h" - -#ifdef HAVE_GNUTLS - -#include "debug.h" -#include "sslconn.h" - -#include - -typedef struct -{ - gnutls_session session; - -} GaimSslGnutlsData; - -#define GAIM_SSL_GNUTLS_DATA(gsc) ((GaimSslGnutlsData *)gsc->private_data) - -static gnutls_certificate_client_credentials xcred; - -static gboolean -ssl_gnutls_init(void) -{ - gnutls_global_init(); - - gnutls_certificate_allocate_credentials(&xcred); - gnutls_certificate_set_x509_trust_file(xcred, "ca.pem", - GNUTLS_X509_FMT_PEM); - - return TRUE; -} - -static void -ssl_gnutls_uninit(void) -{ - gnutls_global_deinit(); - - gnutls_certificate_free_credentials(xcred); -} - -static void -ssl_gnutls_connect_cb(gpointer data, gint source, GaimInputCondition cond) -{ - GaimSslConnection *gsc = (GaimSslConnection *)data; - GaimSslGnutlsData *gnutls_data; - static const int cert_type_priority[2] = { GNUTLS_CRT_X509, 0 }; - int ret; - - if (source < 0) - return; - - gsc->fd = source; - - gnutls_data = g_new0(GaimSslGnutlsData, 1); - gsc->private_data = gnutls_data; - - gnutls_init(&gnutls_data->session, GNUTLS_CLIENT); - gnutls_set_default_priority(gnutls_data->session); - - gnutls_certificate_type_set_priority(gnutls_data->session, - cert_type_priority); - - gnutls_credentials_set(gnutls_data->session, GNUTLS_CRD_CERTIFICATE, - xcred); - - gnutls_transport_set_ptr(gnutls_data->session, GINT_TO_POINTER(source)); - - gaim_debug_info("gnutls", "Handshaking\n"); - ret = gnutls_handshake(gnutls_data->session); - - if (ret < 0) - { - gaim_debug_error("gnutls", "Handshake failed\n"); - - /* XXX: notify the guy expecting the callback somehow? */ - gaim_ssl_close(gsc); - } - else - { - gsc->connect_cb(gsc->connect_cb_data, gsc, cond); - } -} - -static void -ssl_gnutls_close(GaimSslConnection *gsc) -{ - GaimSslGnutlsData *gnutls_data = GAIM_SSL_GNUTLS_DATA(gsc); - - gnutls_bye(gnutls_data->session, GNUTLS_SHUT_RDWR); - - gnutls_deinit(gnutls_data->session); - - g_free(gnutls_data); -} - -static size_t -ssl_gnutls_read(GaimSslConnection *gsc, void *data, size_t len) -{ - GaimSslGnutlsData *gnutls_data = GAIM_SSL_GNUTLS_DATA(gsc); - int s; - - s = gnutls_record_recv(gnutls_data->session, data, len); - - if (s < 0) - s = 0; - - return s; -} - -static size_t -ssl_gnutls_write(GaimSslConnection *gsc, const void *data, size_t len) -{ - GaimSslGnutlsData *gnutls_data = GAIM_SSL_GNUTLS_DATA(gsc); - size_t s; - - s = gnutls_record_send(gnutls_data->session, data, len); - - if (s < 0) - s = 0; - - return s; -} - -static GaimSslOps ssl_ops = -{ - ssl_gnutls_init, - ssl_gnutls_uninit, - ssl_gnutls_connect_cb, - ssl_gnutls_close, - ssl_gnutls_read, - ssl_gnutls_write -}; - -GaimSslOps * -gaim_ssl_gnutls_get_ops() -{ - return &ssl_ops; -} - -#endif /* HAVE_GNUTLS */ diff -r 4fc46299e5fb -r b5f0aae8b5c4 src/ssl-nss.c --- a/src/ssl-nss.c Wed Oct 15 05:04:26 2003 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,256 +0,0 @@ -/** - * @file ssl-nss.c SSL Operations for Mozilla NSS - * @ingroup core - * - * gaim - * - * Copyright (C) 2003 Christian Hammond - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -#include "internal.h" - -#ifdef HAVE_NSS - -#include "debug.h" -#include "sslconn.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -typedef struct -{ - PRFileDesc *fd; - PRFileDesc *in; - -} GaimSslNssData; - -#define GAIM_SSL_NSS_DATA(gsc) ((GaimSslNssData *)gsc->private_data) - -static const PRIOMethods *_nss_methods = NULL; -static PRDescIdentity _identity; - -static SECStatus -ssl_auth_cert(void *arg, PRFileDesc *socket, PRBool checksig, - PRBool is_server) -{ - return SECSuccess; - -#if 0 - CERTCertificate *cert; - void *pinArg; - SECStatus status; - - cert = SSL_PeerCertificate(socket); - pinArg = SSL_RevealPinArg(socket); - - status = CERT_VerifyCertNow((CERTCertDBHandle *)arg, cert, checksig, - certUsageSSLClient, pinArg); - - if (status != SECSuccess) { - gaim_debug_error("nss", "CERT_VerifyCertNow failed\n"); - CERT_DestroyCertificate(cert); - return status; - } - - CERT_DestroyCertificate(cert); - return SECSuccess; -#endif -} - -SECStatus -ssl_bad_cert(void *arg, PRFileDesc *socket) -{ - SECStatus status = SECFailure; - PRErrorCode err; - - if (arg == NULL) - return status; - - *(PRErrorCode *)arg = err = PORT_GetError(); - - switch (err) - { - case SEC_ERROR_INVALID_AVA: - case SEC_ERROR_INVALID_TIME: - case SEC_ERROR_BAD_SIGNATURE: - case SEC_ERROR_EXPIRED_CERTIFICATE: - case SEC_ERROR_UNKNOWN_ISSUER: - case SEC_ERROR_UNTRUSTED_CERT: - case SEC_ERROR_CERT_VALID: - case SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE: - case SEC_ERROR_CRL_EXPIRED: - case SEC_ERROR_CRL_BAD_SIGNATURE: - case SEC_ERROR_EXTENSION_VALUE_INVALID: - case SEC_ERROR_CA_CERT_INVALID: - case SEC_ERROR_CERT_USAGES_INVALID: - case SEC_ERROR_UNKNOWN_CRITICAL_EXTENSION: - status = SECSuccess; - break; - - default: - status = SECFailure; - break; - } - - gaim_debug_error("nss", "Bad certificate: %d\n"); - - return status; -} - -static gboolean -ssl_nss_init(void) -{ - PR_Init(PR_SYSTEM_THREAD, PR_PRIORITY_NORMAL, 1); - NSS_NoDB_Init(NULL); - - /* TODO: Fix this so autoconf does the work trying to find this lib. */ - SECMOD_AddNewModule("Builtins", -#ifndef _WIN32 - LIBDIR "/libnssckbi.so", -#else - "nssckbi.dll", -#endif - 0, 0); - NSS_SetDomesticPolicy(); - - _identity = PR_GetUniqueIdentity("Gaim"); - _nss_methods = PR_GetDefaultIOMethods(); - - return TRUE; -} - -static void -ssl_nss_uninit(void) -{ - PR_Cleanup(); - - _nss_methods = NULL; -} - -static void -ssl_nss_connect_cb(gpointer data, gint source, GaimInputCondition cond) -{ - GaimSslConnection *gsc = (GaimSslConnection *)data; - GaimSslNssData *nss_data = g_new0(GaimSslNssData, 1); - PRSocketOptionData socket_opt; - - gsc->private_data = nss_data; - - gsc->fd = source; - - nss_data->fd = PR_ImportTCPSocket(gsc->fd); - - if (nss_data->fd == NULL) - { - gaim_debug_error("nss", "nss_data->fd == NULL!\n"); - - gaim_ssl_close((GaimSslConnection *)gsc); - - return; - } - - socket_opt.option = PR_SockOpt_Nonblocking; - socket_opt.value.non_blocking = PR_FALSE; - - PR_SetSocketOption(nss_data->fd, &socket_opt); - - nss_data->in = SSL_ImportFD(NULL, nss_data->fd); - - if (nss_data->in == NULL) - { - gaim_debug_error("nss", "nss_data->in == NUL!\n"); - - gaim_ssl_close((GaimSslConnection *)gsc); - - return; - } - - SSL_OptionSet(nss_data->in, SSL_SECURITY, PR_TRUE); - SSL_OptionSet(nss_data->in, SSL_HANDSHAKE_AS_CLIENT, PR_TRUE); - - SSL_AuthCertificateHook(nss_data->in, - (SSLAuthCertificate)ssl_auth_cert, - (void *)CERT_GetDefaultCertDB()); - SSL_BadCertHook(nss_data->in, (SSLBadCertHandler)ssl_bad_cert, NULL); - - SSL_SetURL(nss_data->in, gsc->host); - - SSL_ResetHandshake(nss_data->in, PR_FALSE); - - if (SSL_ForceHandshake(nss_data->in)) - { - gaim_debug_error("nss", "Handshake failed\n"); - - gaim_ssl_close(gsc); - - return; - } - - gsc->connect_cb(gsc->connect_cb_data, gsc, cond); -} - -static void -ssl_nss_close(GaimSslConnection *gsc) -{ - GaimSslNssData *nss_data = GAIM_SSL_NSS_DATA(gsc); - - if (nss_data->in) PR_Close(nss_data->in); - /* if (nss_data->fd) PR_Close(nss_data->fd); */ - - g_free(nss_data); -} - -static size_t -ssl_nss_read(GaimSslConnection *gsc, void *data, size_t len) -{ - GaimSslNssData *nss_data = GAIM_SSL_NSS_DATA(gsc); - - return PR_Read(nss_data->in, data, len); -} - -static size_t -ssl_nss_write(GaimSslConnection *gsc, const void *data, size_t len) -{ - GaimSslNssData *nss_data = GAIM_SSL_NSS_DATA(gsc); - - return PR_Write(nss_data->in, data, len); -} - -static GaimSslOps ssl_ops = -{ - ssl_nss_init, - ssl_nss_uninit, - ssl_nss_connect_cb, - ssl_nss_close, - ssl_nss_read, - ssl_nss_write -}; - -GaimSslOps * -gaim_ssl_nss_get_ops() -{ - return &ssl_ops; -} - -#endif /* HAVE_NSS */