Package: libpurple0 Version: 2.6.6-2 Severity: normal How to reproduce: -init libpurple -connect to a IM server using TLS (tested with XMPP and MSN) -quit libpurple -init libpurple -connect again
Result: connection fails with (16:54:31) nss: Handshake failed (-8128) which, according to [1] means: SEC_ERROR_NO_MODULE -8128 Security library: no security module can perform the requested operation. I am attaching a modified version of "nullclient", which does what mentioned above, in order to help reproducing the issue. See also my execution log. Thanks, Ludovico -- System Information: Debian Release: squeeze/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: amd64 (x86_64) Kernel: Linux 2.6.32-3-amd64 (SMP w/2 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages libpurple0 depends on: ii libavahi-client3 0.6.25-3 Avahi client library ii libavahi-common3 0.6.25-3 Avahi common library ii libavahi-glib1 0.6.25-3 Avahi glib integration library ii libc6 2.10.2-6 Embedded GNU C Library: Shared lib ii libdbus-1-3 1.2.20-2 simple interprocess messaging syst ii libdbus-glib-1-2 0.84-1 simple interprocess messaging syst ii libgadu3 1:1.9.0~rc2-1 Gadu-Gadu protocol library - runti ii libglib2.0-0 2.22.4-1 The GLib library of C routines ii libgstfarsight0.10-0 0.0.17-2+b1 Audio/Video communications framewo ii libgstreamer-plugins-bas 0.10.26-1 GStreamer libraries from the "base ii libgstreamer0.10-0 0.10.26-1 Core GStreamer libraries and eleme ii libidn11 1.18-1 GNU Libidn library, implementation ii libmeanwhile1 1.0.2-3 open implementation of the Lotus S ii libnspr4-0d 4.8.3-1 NetScape Portable Runtime Library ii libnss3-1d 3.12.5-2 Network Security Service libraries ii libperl5.10 5.10.1-11 shared Perl library ii libsasl2-2 2.1.23.dfsg1-5 Cyrus SASL - authentication abstra ii libsasl2-modules 2.1.23.dfsg1-5 Cyrus SASL - pluggable authenticat ii libsilc-1.1-2 1.1.10-2 SILC generic library ii libsilcclient-1.1-3 1.1.10-2 SILC client library ii libxml2 2.7.6.dfsg-2+b1 GNOME XML library ii libzephyr4 3.0-1 Project Athena's notification serv ii perl 5.10.1-11 Larry Wall's Practical Extraction ii perl-base [perlapi-5.10. 5.10.1-11 minimal Perl system ii pidgin-data 2.6.6-2 multi-protocol instant messaging c Versions of packages libpurple0 recommends: ii ca-certificates 20090814 Common CA certificates ii libpurple-bin 2.6.6-2 multi-protocol instant messaging l Versions of packages libpurple0 suggests: ii tcl8.4 8.4.19-4 Tcl (the Tool Command Language) v8 ii tk8.4 8.4.19-4 Tk toolkit for Tcl and X11, v8.4 - -- no debconf information
/* * pidgin * * Pidgin is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. * * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA * */ #include "purple.h" #include <glib.h> #include <signal.h> #include <string.h> #include <unistd.h> #include "defines.h" /** * The following eventloop functions are used in both pidgin and purple-text. If your * application uses glib mainloop, you can safely use this verbatim. */ #define PURPLE_GLIB_READ_COND (G_IO_IN | G_IO_HUP | G_IO_ERR) #define PURPLE_GLIB_WRITE_COND (G_IO_OUT | G_IO_HUP | G_IO_ERR | G_IO_NVAL) typedef struct _PurpleGLibIOClosure { PurpleInputFunction function; guint result; gpointer data; } PurpleGLibIOClosure; static void purple_glib_io_destroy(gpointer data) { g_free(data); } static gboolean purple_glib_io_invoke(GIOChannel *source, GIOCondition condition, gpointer data) { PurpleGLibIOClosure *closure = data; PurpleInputCondition purple_cond = 0; if (condition & PURPLE_GLIB_READ_COND) purple_cond |= PURPLE_INPUT_READ; if (condition & PURPLE_GLIB_WRITE_COND) purple_cond |= PURPLE_INPUT_WRITE; closure->function(closure->data, g_io_channel_unix_get_fd(source), purple_cond); return TRUE; } static guint glib_input_add(gint fd, PurpleInputCondition condition, PurpleInputFunction function, gpointer data) { PurpleGLibIOClosure *closure = g_new0(PurpleGLibIOClosure, 1); GIOChannel *channel; GIOCondition cond = 0; closure->function = function; closure->data = data; if (condition & PURPLE_INPUT_READ) cond |= PURPLE_GLIB_READ_COND; if (condition & PURPLE_INPUT_WRITE) cond |= PURPLE_GLIB_WRITE_COND; channel = g_io_channel_unix_new(fd); closure->result = g_io_add_watch_full(channel, G_PRIORITY_DEFAULT, cond, purple_glib_io_invoke, closure, purple_glib_io_destroy); g_io_channel_unref(channel); return closure->result; } static PurpleEventLoopUiOps glib_eventloops = { g_timeout_add, g_source_remove, glib_input_add, g_source_remove, NULL, #if GLIB_CHECK_VERSION(2,14,0) g_timeout_add_seconds, #else NULL, #endif /* padding */ NULL, NULL, NULL }; /*** End of the eventloop functions. ***/ /*** Conversation uiops ***/ static void null_write_conv(PurpleConversation *conv, const char *who, const char *alias, const char *message, PurpleMessageFlags flags, time_t mtime) { const char *name; if (alias && *alias) name = alias; else if (who && *who) name = who; else name = NULL; printf("(%s) %s %s: %s\n", purple_conversation_get_name(conv), purple_utf8_strftime("(%H:%M:%S)", localtime(&mtime)), name, message); } static PurpleConversationUiOps null_conv_uiops = { NULL, /* create_conversation */ NULL, /* destroy_conversation */ NULL, /* write_chat */ NULL, /* write_im */ null_write_conv, /* write_conv */ NULL, /* chat_add_users */ NULL, /* chat_rename_user */ NULL, /* chat_remove_users */ NULL, /* chat_update_user */ NULL, /* present */ NULL, /* has_focus */ NULL, /* custom_smiley_add */ NULL, /* custom_smiley_write */ NULL, /* custom_smiley_close */ NULL, /* send_confirm */ NULL, NULL, NULL, NULL }; static void null_ui_init(void) { /** * This should initialize the UI components for all the modules. Here we * just initialize the UI for conversations. */ purple_conversations_set_ui_ops(&null_conv_uiops); } static PurpleCoreUiOps null_core_uiops = { NULL, NULL, null_ui_init, NULL, /* padding */ NULL, NULL, NULL, NULL }; static void init_libpurple(void) { /* Set a custom user directory (optional) */ purple_util_set_user_dir(CUSTOM_USER_DIRECTORY); /* We do not want any debugging for now to keep the noise to a minimum. */ purple_debug_set_enabled(TRUE); /* Set the core-uiops, which is used to * - initialize the ui specific preferences. * - initialize the debug ui. * - initialize the ui components for all the modules. * - uninitialize the ui components for all the modules when the core terminates. */ purple_core_set_ui_ops(&null_core_uiops); /* Set the uiops for the eventloop. If your client is glib-based, you can safely * copy this verbatim. */ purple_eventloop_set_ui_ops(&glib_eventloops); /* Set path to search for plugins. The core (libpurple) takes care of loading the * core-plugins, which includes the protocol-plugins. So it is not essential to add * any path here, but it might be desired, especially for ui-specific plugins. */ purple_plugins_add_search_path(CUSTOM_PLUGIN_PATH); /* Now that all the essential stuff has been set, let's try to init the core. It's * necessary to provide a non-NULL name for the current ui to the core. This name * is used by stuff that depends on this ui, for example the ui-specific plugins. */ if (!purple_core_init(UI_ID)) { /* Initializing the core failed. Terminate. */ fprintf(stderr, "libpurple initialization failed. Dumping core.\n" "Please report this!\n"); abort(); } /* Create and load the buddylist. */ purple_set_blist(purple_blist_new()); purple_blist_load(); /* Load the preferences. */ purple_prefs_load(); /* Load the desired plugins. The client should save the list of loaded plugins in * the preferences using purple_plugins_save_loaded(PLUGIN_SAVE_PREF) */ purple_plugins_load_saved(PLUGIN_SAVE_PREF); /* Load the pounces. */ purple_pounces_load(); } GMainLoop *loop = NULL; static gboolean my_exit_loop(gpointer data) { fprintf(stderr, "********************* EXIT LOOP"); g_main_loop_quit(loop); return FALSE; } static gboolean my_quit(gpointer data) { fprintf(stderr, "********************* QUIT"); purple_core_quit(); g_timeout_add(5000, my_exit_loop, NULL); return FALSE; } static void signed_on(PurpleConnection *gc, gpointer null) { PurpleAccount *account = purple_connection_get_account(gc); printf("Account connected: %s %s\n", account->username, account->protocol_id); g_timeout_add(5000, my_quit, NULL); } static void connect_to_signals_for_demonstration_purposes_only(void) { static int handle; purple_signal_connect(purple_connections_get_handle(), "signed-on", &handle, PURPLE_CALLBACK(signed_on), NULL); } int main(int argc, char *argv[]) { GList *iter; int i, j, num = -1; GList *names = NULL; const char *prpl; char name[128]; char *password; loop = g_main_loop_new(NULL, FALSE); PurpleAccount *account; PurpleSavedStatus *status; char *res; /* libpurple's built-in DNS resolution forks processes to perform * blocking lookups without blocking the main process. It does not * handle SIGCHLD itself, so if the UI does not you quickly get an army * of zombie subprocesses marching around. */ signal(SIGCHLD, SIG_IGN); for(j = 0; j < 2; ++j) { init_libpurple(); printf("libpurple initialized.\n"); names = NULL; iter = purple_plugins_get_protocols(); for (i = 0; iter; iter = iter->next) { PurplePlugin *plugin = iter->data; PurplePluginInfo *info = plugin->info; if (info && info->name) { printf("\t%d: %s\n", i++, info->name); names = g_list_append(names, info->id); } } if(num < 0) { printf("Select the protocol [0-%d]: ", i-1); res = fgets(name, sizeof(name), stdin); if (!res) { fprintf(stderr, "Failed to gets protocol selection."); abort(); } sscanf(name, "%d", &num); printf("Username: "); res = fgets(name, sizeof(name), stdin); if (!res) { fprintf(stderr, "Failed to read user name."); abort(); } name[strlen(name) - 1] = 0; /* strip the \n at the end */ /* Get the password for the account */ password = getpass("Password: "); } prpl = g_list_nth_data(names, num); /* Create the account */ account = purple_account_new(name, prpl); purple_account_set_password(account, password); /* It's necessary to enable the account first. */ purple_account_set_enabled(account, UI_ID, TRUE); /* Now, to connect the account(s), create a status and activate it. */ status = purple_savedstatus_new(NULL, PURPLE_STATUS_AVAILABLE); purple_savedstatus_activate(status); connect_to_signals_for_demonstration_purposes_only(); g_main_loop_run(loop); } return 0; }
#define CUSTOM_USER_DIRECTORY "/tmp/testtmp" #define CUSTOM_PLUGIN_PATH "" #define PLUGIN_SAVE_PREF "/purple/nullclient/plugins/saved" #define UI_ID "nullclient"
(17:28:35) prefs: Reading /tmp/testtmp/prefs.xml (17:28:35) prefs: Finished reading /tmp/testtmp/prefs.xml (17:28:35) dbus: okkk (17:28:35) plugins: probing /usr/lib/purple-2/libnovell.so (17:28:35) plugins: probing /usr/lib/purple-2/libicq.so (17:28:35) plugins: probing /usr/lib/purple-2/libsilcpurple.so (17:28:35) plugins: probing /usr/lib/purple-2/libirc.so (17:28:35) plugins: probing /usr/lib/purple-2/libmsn.so (17:28:35) plugins: probing /usr/lib/purple-2/libyahoojp.so (17:28:35) plugins: probing /usr/lib/purple-2/libbonjour.so (17:28:35) plugins: probing /usr/lib/purple-2/libzephyr.so (17:28:35) plugins: probing /usr/lib/purple-2/libsimple.so (17:28:35) plugins: probing /usr/lib/purple-2/statenotify.so (17:28:35) plugins: probing /usr/lib/purple-2/libyahoo.so (17:28:35) plugins: probing /usr/lib/purple-2/libmxit.so (17:28:35) prpl-loubserp-mxit: Loading MXit libPurple plugin... (17:28:35) plugins: probing /usr/lib/purple-2/psychic.so (17:28:35) plugins: probing /usr/lib/purple-2/libmyspace.so (17:28:35) plugins: probing /usr/lib/purple-2/ssl-nss.so (17:28:35) plugins: probing /usr/lib/purple-2/libjabber.so (17:28:35) plugins: /usr/lib/purple-2/libjabber.so is not usable because the 'purple_init_plugin' symbol could not be found. Does the plugin call the PURPLE_INIT_PLUGIN() macro? (17:28:35) plugins: probing /usr/lib/purple-2/buddynote.so (17:28:35) plugins: probing /usr/lib/purple-2/libsametime.so (17:28:35) plugins: /usr/lib/purple-2/libsametime.so has a prefs_info, but is a prpl. This is no longer supported. (17:28:35) plugins: probing /usr/lib/purple-2/log_reader.so (17:28:35) plugins: probing /usr/lib/purple-2/tcl.so (17:28:35) plugins: probing /usr/lib/purple-2/ssl.so (17:28:35) plugins: probing /usr/lib/purple-2/joinpart.so (17:28:35) plugins: probing /usr/lib/purple-2/liboscar.so (17:28:35) plugins: /usr/lib/purple-2/liboscar.so is not usable because the 'purple_init_plugin' symbol could not be found. Does the plugin call the PURPLE_INIT_PLUGIN() macro? (17:28:35) plugins: probing /usr/lib/purple-2/idle.so (17:28:35) plugins: probing /usr/lib/purple-2/libxmpp.so (17:28:35) util: Reading file xmpp-caps.xml from directory /tmp/testtmp (17:28:35) jabber: creating hash tables for data objects (17:28:35) plugins: probing /usr/lib/purple-2/perl.so (17:28:35) plugins: probing /usr/lib/purple-2/libgg.so (17:28:35) plugins: probing /usr/lib/purple-2/offlinemsg.so (17:28:35) plugins: probing /usr/lib/purple-2/newline.so (17:28:35) plugins: probing /usr/lib/purple-2/libqq.so (17:28:35) plugins: probing /usr/lib/purple-2/autoaccept.so (17:28:35) plugins: probing /usr/lib/purple-2/libymsg.so (17:28:35) plugins: /usr/lib/purple-2/libymsg.so is not usable because the 'purple_init_plugin' symbol could not be found. Does the plugin call the PURPLE_INIT_PLUGIN() macro? (17:28:35) plugins: probing /usr/lib/purple-2/libaim.so (17:28:35) plugins: probing /usr/lib/purple-2/dbus-example.so (17:28:35) prefs: /purple/status/scores/offline changed, scheduling save. (17:28:35) prefs: /purple/status/scores/available changed, scheduling save. (17:28:35) prefs: /purple/status/scores/invisible changed, scheduling save. (17:28:35) prefs: /purple/status/scores/away changed, scheduling save. (17:28:35) prefs: /purple/status/scores/extended_away changed, scheduling save. (17:28:35) prefs: /purple/status/scores/idle changed, scheduling save. (17:28:35) prefs: /purple/status/scores/offline_msg changed, scheduling save. (17:28:35) util: Reading file accounts.xml from directory /tmp/testtmp (17:28:35) util: Reading file status.xml from directory /tmp/testtmp (17:28:35) certificate: CertificateVerifier x509, singleuse requested but not found. (17:28:35) certificate: CertificateVerifier singleuse registered (17:28:35) certificate: CertificatePool x509, ca requested but not found. (17:28:35) certificate: CertificateScheme x509 requested but not found. (17:28:35) certificate/x509/ca: Lazy init failed because an X.509 Scheme is not yet registered. Maybe it will be better later. (17:28:35) certificate/x509/ca: Init failed, probably because a dependency is not yet registered. It has been deferred to later. (17:28:35) certificate: CertificatePool ca registered (17:28:35) certificate: CertificatePool x509, tls_peers requested but not found. (17:28:35) certificate: CertificatePool tls_peers registered (17:28:35) certificate: CertificateVerifier x509, tls_cached requested but not found. (17:28:35) certificate: CertificateVerifier tls_cached registered (17:28:35) prefs: /purple/logging/format changed, scheduling save. (17:28:35) prefs: /purple/logging/format changed, scheduling save. (17:28:35) prefs: /purple/proxy/type changed, scheduling save. (17:28:35) prefs: /purple/proxy/host changed, scheduling save. (17:28:35) prefs: /purple/proxy/port changed, scheduling save. (17:28:35) prefs: /purple/proxy/username changed, scheduling save. (17:28:35) prefs: /purple/proxy/password changed, scheduling save. (17:28:35) certificate: CertificateScheme x509 requested but not found. (17:28:35) certificate: CertificateScheme x509 registered (17:28:35) util: Reading file smileys.xml from directory /tmp/testtmp (17:28:35) util: File /tmp/testtmp/smileys.xml does not exist (this is not necessarily an error) (17:28:35) stun: using server (17:28:35) util: Reading file blist.xml from directory /tmp/testtmp (17:28:35) util: File /tmp/testtmp/blist.xml does not exist (this is not necessarily an error) (17:28:35) prefs: Reading /tmp/testtmp/prefs.xml (17:28:35) prefs: Finished reading /tmp/testtmp/prefs.xml (17:28:35) prefs: purple_prefs_get_path_list: Unknown pref /purple/nullclient/plugins/saved (17:28:35) pounce: Error reading pounces: Failed to open file '/tmp/testtmp/pounces.xml': No such file or directory libpurple initialized. 0: AIM 1: Bonjour 2: Gadu-Gadu 3: GroupWise 4: ICQ 5: IRC 6: MSN 7: MXit 8: MySpaceIM 9: QQ 10: SILC 11: SIMPLE 12: Sametime 13: XMPP 14: Yahoo 15: Yahoo JAPAN 16: Zephyr Select the protocol [0-16]: Username: (17:28:47) account: Connecting to account ludovico.cave...@gmail.com. (17:28:47) connection: Connecting. gc = 0x75a130 (17:28:47) dnssrv: querying SRV record for gmail.com: _xmpp-client._tcp.gmail.com (17:28:47) prefs: /purple/savedstatus/default changed, scheduling save. (17:28:47) prefs: /purple/savedstatus/isidleaway changed, scheduling save. (17:28:47) util: Writing file prefs.xml to directory /tmp/testtmp (17:28:47) util: Writing file /tmp/testtmp/prefs.xml (17:28:47) dnssrv: found 5 SRV entries (17:28:47) dns: DNS query for 'talk.l.google.com' queued (17:28:47) dns: Created new DNS child 20201, there are now 1 children. (17:28:47) dns: Successfully sent DNS request to child 20201 (17:28:47) dns: Got response for 'talk.l.google.com' (17:28:47) dnsquery: IP resolved for talk.l.google.com (17:28:47) proxy: Attempting connection to 209.85.137.125 (17:28:47) proxy: Connecting to talk.l.google.com:5222 with no proxy (17:28:47) proxy: Connection in progress (17:28:47) proxy: Connecting to talk.l.google.com:5222. (17:28:47) proxy: Connected to talk.l.google.com:5222. (17:28:47) jabber: Sending (ludovico.cave...@gmail.com): <?xml version='1.0' ?> (17:28:47) jabber: Sending (ludovico.cave...@gmail.com): <stream:stream to='gmail.com' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'> (17:28:47) jabber: Recv (138): <stream:stream from="gmail.com" id="FBF008DD8DE1189E" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client"> (17:28:47) jabber: Recv (210): <stream:features><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"><required/></starttls><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-GOOGLE-TOKEN</mechanism></mechanisms></stream:features> (17:28:47) jabber: Sending (ludovico.cave...@gmail.com): <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/> (17:28:47) jabber: Recv (50): <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/> (17:28:47) nss: subject=CN=gmail.com,O=Google Inc.,L=Mountain View,ST=California,C=US issuer=OU=Equifax Secure Certificate Authority,O=Equifax,C=US (17:28:47) nss: subject=OU=Equifax Secure Certificate Authority,O=Equifax,C=US issuer=OU=Equifax Secure Certificate Authority,O=Equifax,C=US (17:28:47) certificate/x509/tls_cached: Starting verify for gmail.com (17:28:47) certificate/x509/tls_cached: Checking for cached cert... (17:28:47) certificate/x509/tls_cached: ...Found cached cert (17:28:47) nss/x509: Loading certificate from /tmp/testtmp/certificates/x509/tls_peers/gmail.com (17:28:47) certificate/x509/tls_cached: Peer cert matched cached (17:28:47) nss/x509: Exporting certificate to /tmp/testtmp/certificates/x509/tls_peers/gmail.com (17:28:47) util: Writing file /tmp/testtmp/certificates/x509/tls_peers/gmail.com (17:28:47) certificate: Successfully verified certificate for gmail.com (17:28:47) jabber: Sending (ssl) (ludovico.cave...@gmail.com): <stream:stream to='gmail.com' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'> (17:28:47) jabber: Recv (ssl)(138): <stream:stream from="gmail.com" id="C812716379950C93" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client"> (17:28:47) jabber: Recv (ssl)(166): <stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>PLAIN</mechanism><mechanism>X-GOOGLE-TOKEN</mechanism></mechanisms></stream:features> (17:28:47) sasl: Mechs found: PLAIN (17:28:47) jabber: Sending (ssl) (ludovico.cave...@gmail.com): <auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN' xmlns:ga='http://www.google.com/talk/protocol/auth' ga:client-uses-full-bind-result='true'>password removed</auth> (17:28:47) jabber: Recv (ssl)(51): <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/> (17:28:47) jabber: Sending (ssl) (ludovico.cave...@gmail.com): <stream:stream to='gmail.com' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'> (17:28:47) jabber: Recv (ssl)(138): <stream:stream from="gmail.com" id="1F201BFDCADF3A04" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client"> (17:28:47) jabber: Recv (ssl)(137): <stream:features><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></stream:features> (17:28:47) jabber: Sending (ssl) (ludovico.cave...@gmail.com): <iq type='set' id='purpleefe4ed02'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/></iq> (17:28:47) jabber: Recv (ssl)(143): <iq id="purpleefe4ed02" type="result"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>ludovico.cave...@gmail.com/1D900A98</jid></bind></iq> (17:28:47) jabber: Sending (ssl) (ludovico.cave...@gmail.com/1D900A98): <iq type='set' id='purpleefe4ed03'><session xmlns='urn:ietf:params:xml:ns:xmpp-session'/></iq> (17:28:47) jabber: Recv (ssl)(1): (17:28:47) jabber: Recv (ssl)(39): <iq type="result" id="purpleefe4ed03"/> (17:28:47) jabber: Sending (ssl) (ludovico.cave...@gmail.com/1D900A98): <iq type='get' id='purpleefe4ed04' to='gmail.com'><query xmlns='http://jabber.org/protocol/disco#items'/></iq> (17:28:47) jabber: Sending (ssl) (ludovico.cave...@gmail.com/1D900A98): <iq type='get' id='purpleefe4ed05' to='gmail.com'><query xmlns='http://jabber.org/protocol/disco#info'/></iq> (17:28:47) jabber: Recv (ssl)(265): <iq type="error" id="purpleefe4ed04" to="ludovico.cave...@gmail.com/1D900A98" from="gmail.com"><query xmlns="http://jabber.org/protocol/disco#items"/><error code="501" type="cancel"><feature-not-implemented xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq> (17:28:48) jabber: Recv (ssl)(582): <iq to="ludovico.cave...@gmail.com/1D900A98" from="gmail.com" id="purpleefe4ed05" type="result"><query xmlns="http://jabber.org/protocol/disco#info"><identity category="server" type="im" name="Google Talk"/><feature var="http://jabber.org/protocol/disco#info"/><feature var="google:jingleinfo"/><feature var="google:roster"/><feature var="google:nosave"/><feature var="google:setting"/><feature var="google:shared-status"/><feature var="http://jabber.org/protocol/archive#otr"/><feature var="google:mail:notify"/><feature var="http://jabber.org/protocol/archive#save"/></query></iq> (17:28:48) jabber: Google Talk! (17:28:48) jabber: sending google:jingleinfo query (17:28:48) jabber: Sending (ssl) (ludovico.cave...@gmail.com/1D900A98): <iq type='get' id='purpleefe4ed06'><query xmlns='google:jingleinfo'/></iq> (17:28:48) jabber: Sending (ssl) (ludovico.cave...@gmail.com/1D900A98): <iq type='get' id='purpleefe4ed07'><vCard xmlns='vcard-temp'/></iq> (17:28:48) jabber: Sending (ssl) (ludovico.cave...@gmail.com/1D900A98): <iq type='get' id='purpleefe4ed08'><query xmlns='jabber:iq:roster' xmlns:gr='google:roster' gr:ext='2'/></iq> (17:28:48) jabber: Recv (ssl)(548): <iq to="ludovico.cave...@gmail.com/1D900A98" id="purpleefe4ed06" type="result"><query xmlns="google:jingleinfo"><stun><server host="stun.l.google.com" udp="19302"/><server host="stun2.l.google.com" udp="19302"/><server host="stun1.l.google.com" udp="19302"/><server host="stun4.l.google.com" udp="19302"/><server host="stun3.l.google.com" udp="19302"/></stun><relay><token>CAESIwoabHVkb3ZpY28uY2F2ZWRvbkBnbWFpbC5jb20Q0c33gvQkGhDD4qdBRBaFVHqMLLjLaDC+</token><server host="relay.google.com" udp="19295" tcp="19294" tcpssl="443"/></relay></query></iq> (17:28:48) jabber: got google:jingleinfo (17:28:48) dns: DNS query for 'stun.l.google.com' queued (17:28:48) dns: Successfully sent DNS request to child 20201 (17:28:48) dns: Got response for 'stun.l.google.com' (17:28:48) dnsquery: IP resolved for stun.l.google.com (17:28:48) jabber: set Google STUN IP/port address: 209.85.137.126:19302 [...] (17:28:50) util: Writing file /tmp/testtmp/icons/c2d2d17c626f62a79440cdff41db410fc59866d9.jpg (17:28:51) util: Writing file accounts.xml to directory /tmp/testtmp (17:28:51) util: Writing file /tmp/testtmp/accounts.xml (17:28:51) util: Writing file status.xml to directory /tmp/testtmp (17:28:51) util: Writing file /tmp/testtmp/status.xml ********************* QUIT(17:28:54) account: Disconnecting account ludovico.cave...@gmail.com (0x73fb10) (17:28:54) connection: Disconnecting connection 0x75a130 (17:28:54) connection: Deactivating keepalive. (17:28:54) jabber: Sending (ssl) (ludovico.cave...@gmail.com/1D900A98): </stream:stream> (17:28:54) connection: Destroying connection 0x75a130 (17:28:54) certificate: CertificateVerifier tls_cached unregistered (17:28:54) certificate: CertificateVerifier singleuse unregistered (17:28:54) certificate: CertificatePool tls_peers unregistered (17:28:54) certificate: CertificatePool ca unregistered (17:28:54) main: Unloading normal plugins (17:28:54) plugins: Unloading plugin NSS (17:28:54) certificate: CertificateScheme x509 unregistered (17:28:54) plugins: Unloading plugin SSL (17:28:54) blist: Destroying (17:28:54) util: Writing file status.xml to directory /tmp/testtmp (17:28:54) util: Writing file /tmp/testtmp/status.xml (17:28:54) util: Writing file accounts.xml to directory /tmp/testtmp (17:28:54) util: Writing file /tmp/testtmp/accounts.xml (17:28:54) main: Unloading all plugins (17:28:54) plugins: Unloading plugin GroupWise (17:28:54) plugins: Unloading plugin ICQ (17:28:54) plugins: Unloading plugin SILC (17:28:54) plugins: Unloading plugin IRC (17:28:54) plugins: Unloading plugin MSN (17:28:54) plugins: Unloading plugin Yahoo JAPAN (17:28:54) plugins: Unloading plugin Bonjour (17:28:54) plugins: Unloading plugin Zephyr (17:28:54) plugins: Unloading plugin SIMPLE (17:28:54) plugins: Unloading plugin Yahoo (17:28:54) plugins: Unloading plugin MXit (17:28:54) plugins: Unloading plugin MySpaceIM (17:28:54) plugins: Unloading plugin Sametime (17:28:54) plugins: Unloading plugin Tcl Plugin Loader (17:28:54) plugins: Unloading plugin XMPP (17:28:54) jabber: destroying hash tables for data objects (17:28:54) plugins: Unloading plugin Perl Plugin Loader (17:28:54) plugins: Unloading plugin Gadu-Gadu (17:28:54) plugins: Unloading plugin QQ (17:28:54) plugins: Unloading plugin AIM ********************* EXIT LOOP(17:28:59) prefs: Reading /tmp/testtmp/prefs.xml (17:28:59) prefs: Finished reading /tmp/testtmp/prefs.xml (17:28:59) dbus: okkk (17:28:59) plugins: probing /usr/lib/purple-2/libnovell.so (17:28:59) plugins: probing /usr/lib/purple-2/libicq.so (17:28:59) plugins: probing /usr/lib/purple-2/libsilcpurple.so (17:28:59) plugins: probing /usr/lib/purple-2/libirc.so (17:28:59) plugins: probing /usr/lib/purple-2/libmsn.so (17:28:59) plugins: probing /usr/lib/purple-2/libyahoojp.so (17:28:59) plugins: probing /usr/lib/purple-2/libbonjour.so (17:28:59) plugins: probing /usr/lib/purple-2/libzephyr.so (17:28:59) plugins: probing /usr/lib/purple-2/libsimple.so (17:28:59) plugins: probing /usr/lib/purple-2/statenotify.so (17:28:59) plugins: probing /usr/lib/purple-2/libyahoo.so (17:28:59) plugins: probing /usr/lib/purple-2/libmxit.so (17:28:59) prpl-loubserp-mxit: Loading MXit libPurple plugin... (17:28:59) plugins: probing /usr/lib/purple-2/psychic.so (17:28:59) plugins: probing /usr/lib/purple-2/libmyspace.so (17:28:59) plugins: probing /usr/lib/purple-2/ssl-nss.so (17:28:59) plugins: probing /usr/lib/purple-2/libjabber.so (17:28:59) plugins: /usr/lib/purple-2/libjabber.so is not usable because the 'purple_init_plugin' symbol could not be found. Does the plugin call the PURPLE_INIT_PLUGIN() macro? (17:28:59) plugins: probing /usr/lib/purple-2/buddynote.so (17:28:59) plugins: probing /usr/lib/purple-2/libsametime.so (17:28:59) plugins: /usr/lib/purple-2/libsametime.so has a prefs_info, but is a prpl. This is no longer supported. (17:28:59) plugins: probing /usr/lib/purple-2/log_reader.so (17:28:59) plugins: probing /usr/lib/purple-2/tcl.so (17:28:59) plugins: probing /usr/lib/purple-2/ssl.so (17:28:59) plugins: probing /usr/lib/purple-2/joinpart.so (17:28:59) plugins: probing /usr/lib/purple-2/liboscar.so (17:28:59) plugins: /usr/lib/purple-2/liboscar.so is not usable because the 'purple_init_plugin' symbol could not be found. Does the plugin call the PURPLE_INIT_PLUGIN() macro? (17:28:59) plugins: probing /usr/lib/purple-2/idle.so (17:28:59) plugins: probing /usr/lib/purple-2/libxmpp.so (17:28:59) util: Reading file xmpp-caps.xml from directory /tmp/testtmp (17:28:59) jabber: creating hash tables for data objects (17:28:59) plugins: probing /usr/lib/purple-2/perl.so (17:28:59) plugins: probing /usr/lib/purple-2/libgg.so (17:28:59) plugins: probing /usr/lib/purple-2/offlinemsg.so (17:28:59) plugins: probing /usr/lib/purple-2/newline.so (17:28:59) plugins: probing /usr/lib/purple-2/libqq.so (17:28:59) plugins: probing /usr/lib/purple-2/autoaccept.so (17:28:59) plugins: probing /usr/lib/purple-2/libymsg.so (17:28:59) plugins: /usr/lib/purple-2/libymsg.so is not usable because the 'purple_init_plugin' symbol could not be found. Does the plugin call the PURPLE_INIT_PLUGIN() macro? (17:28:59) plugins: probing /usr/lib/purple-2/libaim.so (17:28:59) plugins: probing /usr/lib/purple-2/dbus-example.so (17:28:59) prefs: /purple/status/scores/offline changed, scheduling save. (17:28:59) prefs: /purple/status/scores/available changed, scheduling save. (17:28:59) prefs: /purple/status/scores/invisible changed, scheduling save. (17:28:59) prefs: /purple/status/scores/away changed, scheduling save. (17:28:59) prefs: /purple/status/scores/extended_away changed, scheduling save. (17:28:59) prefs: /purple/status/scores/idle changed, scheduling save. (17:28:59) prefs: /purple/status/scores/offline_msg changed, scheduling save. (17:28:59) util: Reading file accounts.xml from directory /tmp/testtmp (17:28:59) util: Reading file status.xml from directory /tmp/testtmp (17:28:59) certificate: CertificateVerifier x509, singleuse requested but not found. (17:28:59) certificate: CertificateVerifier singleuse registered (17:28:59) certificate: CertificatePool x509, ca requested but not found. (17:28:59) certificate: CertificateScheme x509 requested but not found. (17:28:59) certificate/x509/ca: Lazy init failed because an X.509 Scheme is not yet registered. Maybe it will be better later. (17:28:59) certificate/x509/ca: Init failed, probably because a dependency is not yet registered. It has been deferred to later. (17:28:59) certificate: CertificatePool ca registered (17:28:59) certificate: CertificatePool x509, tls_peers requested but not found. (17:28:59) certificate: CertificatePool tls_peers registered (17:28:59) certificate: CertificateVerifier x509, tls_cached requested but not found. (17:28:59) certificate: CertificateVerifier tls_cached registered (17:28:59) prefs: /purple/logging/format changed, scheduling save. (17:28:59) prefs: /purple/logging/format changed, scheduling save. (17:28:59) prefs: /purple/proxy/type changed, scheduling save. (17:28:59) prefs: /purple/proxy/host changed, scheduling save. (17:28:59) prefs: /purple/proxy/port changed, scheduling save. (17:28:59) prefs: /purple/proxy/username changed, scheduling save. (17:28:59) prefs: /purple/proxy/password changed, scheduling save. (17:28:59) certificate: CertificateScheme x509 requested but not found. (17:28:59) certificate: CertificateScheme x509 registered (17:28:59) util: Reading file smileys.xml from directory /tmp/testtmp (17:28:59) util: File /tmp/testtmp/smileys.xml does not exist (this is not necessarily an error) (17:28:59) stun: using server (17:28:59) util: Reading file blist.xml from directory /tmp/testtmp (17:28:59) util: File /tmp/testtmp/blist.xml does not exist (this is not necessarily an error) (17:28:59) prefs: Reading /tmp/testtmp/prefs.xml (17:28:59) prefs: Finished reading /tmp/testtmp/prefs.xml (17:28:59) prefs: purple_prefs_get_path_list: Unknown pref /purple/nullclient/plugins/saved (17:28:59) pounce: Error reading pounces: Failed to open file '/tmp/testtmp/pounces.xml': No such file or directory libpurple initialized. 0: AIM 1: Bonjour 2: Gadu-Gadu 3: GroupWise 4: ICQ 5: IRC 6: MSN 7: MXit 8: MySpaceIM 9: QQ 10: SILC 11: SIMPLE 12: Sametime 13: XMPP 14: Yahoo 15: Yahoo JAPAN 16: Zephyr (17:28:59) account: Connecting to account ludovico.cave...@gmail.com. (17:28:59) connection: Connecting. gc = 0x6dc740 (17:28:59) dnssrv: querying SRV record for gmail.com: _xmpp-client._tcp.gmail.com (17:28:59) prefs: /purple/savedstatus/default changed, scheduling save. (17:28:59) dnssrv: found 5 SRV entries (17:28:59) dns: DNS query for 'talk.l.google.com' queued (17:28:59) dns: Created new DNS child 20204, there are now 1 children. (17:28:59) dns: Successfully sent DNS request to child 20204 (17:28:59) dns: Got response for 'talk.l.google.com' (17:28:59) dnsquery: IP resolved for talk.l.google.com (17:28:59) proxy: Attempting connection to 209.85.137.125 (17:28:59) proxy: Connecting to talk.l.google.com:5222 with no proxy (17:28:59) proxy: Connection in progress (17:28:59) proxy: Connecting to talk.l.google.com:5222. (17:28:59) proxy: Connected to talk.l.google.com:5222. (17:28:59) jabber: Sending (ludovico.cave...@gmail.com): <?xml version='1.0' ?> (17:28:59) jabber: Sending (ludovico.cave...@gmail.com): <stream:stream to='gmail.com' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'> (17:28:59) jabber: Recv (138): <stream:stream from="gmail.com" id="42ABEC4D237CAF9F" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client"> (17:28:59) jabber: Recv (210): <stream:features><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"><required/></starttls><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-GOOGLE-TOKEN</mechanism></mechanisms></stream:features> (17:28:59) jabber: Sending (ludovico.cave...@gmail.com): <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/> (17:28:59) jabber: Recv (50): <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/> (17:28:59) nss: Handshake failed (-8128) (17:28:59) connection: Connection error on 0x6dc740 (reason: 5 description: SSL Handshake Failed) (17:28:59) account: Disconnecting account ludovico.cave...@gmail.com (0x75c070) (17:28:59) connection: Disconnecting connection 0x6dc740 (17:28:59) connection: Destroying connection 0x6dc740