summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Aurich <darkrain42@pidgin.im>2008-12-11 08:06:23 +0000
committerPaul Aurich <darkrain42@pidgin.im>2008-12-11 08:06:23 +0000
commitd76c226d9fbf5d023aa3587cb077c59799c209af (patch)
treeaf04ee81070a01c93bdbec193ba6823874fb8d93
parent404a27bdb5c39897cf3ccf48a2b03b8b2d349fe3 (diff)
downloadpidgin-d76c226d9fbf5d023aa3587cb077c59799c209af.tar.gz
Use purple_proxy_connect + purple_ssl_connect_with_host_fd() to hopefully
silence warnings (I get more warnings because I don't have the certificate in a trusted store)
-rw-r--r--libpurple/protocols/oscar/flap_connection.c1
-rw-r--r--libpurple/protocols/oscar/oscar.c36
-rw-r--r--libpurple/protocols/oscar/oscar.h1
3 files changed, 35 insertions, 3 deletions
diff --git a/libpurple/protocols/oscar/flap_connection.c b/libpurple/protocols/oscar/flap_connection.c
index 2a73f791dc..7ed3553193 100644
--- a/libpurple/protocols/oscar/flap_connection.c
+++ b/libpurple/protocols/oscar/flap_connection.c
@@ -476,6 +476,7 @@ flap_connection_destroy_cb(gpointer data)
g_free(conn->error_message);
g_free(conn->cookie);
+ g_free(conn->ssl_cert_cn);
/*
* Free conn->internal, if necessary
diff --git a/libpurple/protocols/oscar/oscar.c b/libpurple/protocols/oscar/oscar.c
index 86be8591b9..2f5513a6a5 100644
--- a/libpurple/protocols/oscar/oscar.c
+++ b/libpurple/protocols/oscar/oscar.c
@@ -1227,6 +1227,32 @@ ssl_connection_error_cb(PurpleSslConnection *gsc, PurpleSslErrorType error,
}
static void
+ssl_proxy_conn_established_cb(gpointer data, gint source, const gchar *error_message)
+{
+ OscarData *od;
+ PurpleConnection *gc;
+ PurpleAccount *account;
+ FlapConnection *conn;
+
+ conn = data;
+ od = conn->od;
+ gc = od->gc;
+ account = purple_connection_get_account(gc);
+
+ conn->connect_data = NULL;
+
+ if (source < 0)
+ {
+ connection_common_error_cb(conn, error_message);
+ return;
+ }
+
+ conn->gsc = purple_ssl_connect_with_host_fd(account, source,
+ ssl_connection_established_cb, ssl_connection_error_cb,
+ conn->ssl_cert_cn, conn);
+}
+
+static void
flap_connection_established_bos(OscarData *od, FlapConnection *conn)
{
PurpleConnection *gc = od->gc;
@@ -1992,9 +2018,13 @@ purple_handle_redirect(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...)
if (redir->use_ssl)
{
- newconn->gsc = purple_ssl_connect(account, host, port,
- ssl_connection_established_cb, ssl_connection_error_cb,
- newconn);
+ /* FIXME: It should be possible to specify a certificate common name
+ * distinct from the host we're passing to purple_ssl_connect. The
+ * way to work around that is to use purple_proxy_connect +
+ * purple_ssl_connect_with_host_fd */
+ newconn->ssl_cert_cn = g_strdup(redir->ssl_cert_cn);
+ newconn->connect_data = purple_proxy_connect(NULL, account, host, port,
+ ssl_proxy_conn_established_cb, newconn);
}
else
{
diff --git a/libpurple/protocols/oscar/oscar.h b/libpurple/protocols/oscar/oscar.h
index 35c1a3e784..f49dc88caf 100644
--- a/libpurple/protocols/oscar/oscar.h
+++ b/libpurple/protocols/oscar/oscar.h
@@ -417,6 +417,7 @@ struct _FlapConnection
guint16 cookielen;
guint8 *cookie;
gpointer new_conn_data;
+ gchar *ssl_cert_cn;
int fd;
PurpleSslConnection *gsc;