diff options
author | Paul Aurich <darkrain42@pidgin.im> | 2008-12-11 08:06:23 +0000 |
---|---|---|
committer | Paul Aurich <darkrain42@pidgin.im> | 2008-12-11 08:06:23 +0000 |
commit | d76c226d9fbf5d023aa3587cb077c59799c209af (patch) | |
tree | af04ee81070a01c93bdbec193ba6823874fb8d93 | |
parent | 404a27bdb5c39897cf3ccf48a2b03b8b2d349fe3 (diff) | |
download | pidgin-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.c | 1 | ||||
-rw-r--r-- | libpurple/protocols/oscar/oscar.c | 36 | ||||
-rw-r--r-- | libpurple/protocols/oscar/oscar.h | 1 |
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; |