--- Begin Message ---
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
--- End Message ---