# HG changeset patch # User masca@cpw.pidgin.im # Date 1288589161 0 # Node ID 734c5c08b5dd6df54ee39b5e71a79bc4add603ac # Parent 29c3443419c3457d3b1bab903863c3238216457e# Parent 555862567b38b955874636488cdbf2c1ff5483b9 propagate from branch 'im.pidgin.soc.2010.msn-tlc' (head f9e92250cfa7d84022736153e2c970889805aaab) to branch 'im.pidgin.pidgin' (head 28463210563e214424c638428d438ae2f4dd0b0e) diff -r 555862567b38 -r 734c5c08b5dd ChangeLog --- a/ChangeLog Sat Oct 30 17:45:46 2010 +0000 +++ b/ChangeLog Mon Nov 01 05:26:01 2010 +0000 @@ -1,6 +1,34 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul -version 2.7.5 (MM/DD/YYYY): +version 2.7.6 (??/??/????): + +version 2.7.5 (10/31/2010): + General: + * Added Verisign Class 3 Public CA - G2 root CA. + + Pidgin: + * Properly differentiate between bn and bn_IN in the Translation + Information dialog. + + AIM and/or ICQ: + * Display the "Authorize buddy?" minidialog when the requestor has an + empty nickname. (#12810) + * New ICQ accounts default to proper ICQ servers. Old accounts using one + of the old default servers will be silently migrated to use the proper + servers. + * ICQ accounts using clientLogin now use the correct ICQ servers. This is + separate from the server settings mentioned above. + * '<' should no longer cause ICQ status messages to be truncated in some + locations. (#11964, #12593) + * Fix sending messages to chat rooms. (#12768) + + Bonjour: + * Don't crash when attempting to log into a Bonjour account and init + failed. + + Windows-Specific Changes: + * Quote the path stored in the registry when the "run at startup" option + in the Windows Pidgin Options plugin is used. (#12781) version 2.7.4 (10/20/2010): General: diff -r 555862567b38 -r 734c5c08b5dd ChangeLog.API --- a/ChangeLog.API Sat Oct 30 17:45:46 2010 +0000 +++ b/ChangeLog.API Mon Nov 01 05:26:01 2010 +0000 @@ -1,6 +1,9 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul -version 2.7.5 (MM/DD/YYYY): +version 2.7.6 (??/??/????): + +version 2.7.5 (10/31/2010): + * No changes version 2.7.4 (10/20/2010): Perl: diff -r 555862567b38 -r 734c5c08b5dd NEWS --- a/NEWS Sat Oct 30 17:45:46 2010 +0000 +++ b/NEWS Mon Nov 01 05:26:01 2010 +0000 @@ -2,7 +2,12 @@ Our development blog is available at: http://planet.pidgin.im -2.7.5 (MM/DD/YYYY): +2.7.6 (??/??/????): + +2.7.5 (10/31/2010): + John: A bugfix release for all of you! This time we fixed a bunch of + bugs ranging from annoying regressions to long-standing bugs we didn't + realize until now were bugs. Enjoy! 2.7.4 (10/20/2010): John: This release came at this particular time due to some security diff -r 555862567b38 -r 734c5c08b5dd configure.ac --- a/configure.ac Sat Oct 30 17:45:46 2010 +0000 +++ b/configure.ac Mon Nov 01 05:26:01 2010 +0000 @@ -46,7 +46,7 @@ m4_define([purple_lt_current], [7]) m4_define([purple_major_version], [2]) m4_define([purple_minor_version], [7]) -m4_define([purple_micro_version], [5]) +m4_define([purple_micro_version], [6]) m4_define([purple_version_suffix], [devel]) m4_define([purple_version], [purple_major_version.purple_minor_version.purple_micro_version]) @@ -55,7 +55,7 @@ m4_define([gnt_lt_current], [8]) m4_define([gnt_major_version], [2]) m4_define([gnt_minor_version], [8]) -m4_define([gnt_micro_version], [2]) +m4_define([gnt_micro_version], [3]) m4_define([gnt_version_suffix], [devel]) m4_define([gnt_version], [gnt_major_version.gnt_minor_version.gnt_micro_version]) diff -r 555862567b38 -r 734c5c08b5dd libpurple/account.c --- a/libpurple/account.c Sat Oct 30 17:45:46 2010 +0000 +++ b/libpurple/account.c Mon Nov 01 05:26:01 2010 +0000 @@ -513,6 +513,29 @@ } static void +migrate_icq_server(PurpleAccount *account) +{ + /* Migrate the login server setting for ICQ accounts. See + * 'mtn log --last 1 --no-graph --from b6d7712e90b68610df3bd2d8cbaf46d94c8b3794' + * for details on the change. */ + + if(purple_strequal(purple_account_get_protocol_id(account), "prpl-icq")) { + const char *tmp = purple_account_get_string(account, "server", NULL); + + /* Non-secure server */ + if(purple_strequal(tmp, "login.messaging.aol.com") || + purple_strequal(tmp, "login.oscar.aol.com")) + purple_account_set_string(account, "server", "login.icq.com"); + + /* Secure server */ + if(purple_strequal(tmp, "slogin.oscar.aol.com")) + purple_account_set_string(account, "server", "slogin.icq.com"); + } + + return; +} + +static void migrate_xmpp_encryption(PurpleAccount *account) { /* When this is removed, nuke the "old_ssl" and "require_tls" settings */ @@ -598,6 +621,9 @@ /* we do this here because we need access to account settings to determine * if we can/should migrate an old Yahoo! JAPAN account */ migrate_yahoo_japan(account); + /* we do this here because we need access to account settings to determine + * if we can/should migrate an ICQ account's server setting */ + migrate_icq_server(account); /* we do this here because we need to do it before the user views the * Edit Account dialog. */ migrate_xmpp_encryption(account); diff -r 555862567b38 -r 734c5c08b5dd libpurple/connection.c --- a/libpurple/connection.c Sat Oct 30 17:45:46 2010 +0000 +++ b/libpurple/connection.c Mon Nov 01 05:26:01 2010 +0000 @@ -135,7 +135,7 @@ !(prpl_info->options & OPT_PROTO_NO_PASSWORD) && !(prpl_info->options & OPT_PROTO_PASSWORD_OPTIONAL)) { - purple_debug_error("connection", "Can not connect to account %s without " + purple_debug_error("connection", "Cannot connect to account %s without " "a password.\n", purple_account_get_username(account)); return; } @@ -210,7 +210,7 @@ !(prpl_info->options & OPT_PROTO_NO_PASSWORD) && !(prpl_info->options & OPT_PROTO_PASSWORD_OPTIONAL)) { - purple_debug_error("connection", "Can not connect to account %s without " + purple_debug_error("connection", "Cannot connect to account %s without " "a password.\n", purple_account_get_username(account)); return; } diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/clientlogin.c --- a/libpurple/protocols/oscar/clientlogin.c Sat Oct 30 17:45:46 2010 +0000 +++ b/libpurple/protocols/oscar/clientlogin.c Mon Nov 01 05:26:01 2010 +0000 @@ -42,8 +42,36 @@ #include "cipher.h" #include "core.h" -#define URL_CLIENT_LOGIN "https://api.screenname.aol.com/auth/clientLogin" -#define URL_START_OSCAR_SESSION "https://api.oscar.aol.com/aim/startOSCARSession" +#define AIM_LOGIN_HOST "api.screenname.aol.com" +#define ICQ_LOGIN_HOST "api.login.icq.net" + +#define AIM_API_HOST "api.oscar.aol.com" +#define ICQ_API_HOST "api.icq.net" + +#define CLIENT_LOGIN_PAGE "/auth/clientLogin" +#define START_OSCAR_SESSION_PAGE "/aim/startOSCARSession" + +#define HTTPS_FORMAT_URL(host, page) "https://" host page + +static const gchar *client_login_urls[] = { + HTTPS_FORMAT_URL(AIM_LOGIN_HOST, CLIENT_LOGIN_PAGE), + HTTPS_FORMAT_URL(ICQ_LOGIN_HOST, CLIENT_LOGIN_PAGE), +}; + +static const gchar *start_oscar_session_urls[] = { + HTTPS_FORMAT_URL(AIM_API_HOST, START_OSCAR_SESSION_PAGE), + HTTPS_FORMAT_URL(ICQ_API_HOST, START_OSCAR_SESSION_PAGE), +}; + +static const gchar *get_client_login_url(OscarData *od) +{ + return client_login_urls[od->icq]; +} + +static const gchar *get_start_oscar_session_url(OscarData *od) +{ + return start_oscar_session_urls[od->icq]; +} /* * Using clientLogin requires a developer ID. This key is for libpurple. @@ -125,6 +153,7 @@ static gboolean parse_start_oscar_session_response(PurpleConnection *gc, const gchar *response, gsize response_len, char **host, unsigned short *port, char **cookie, char **tls_certname) { + OscarData *od = purple_connection_get_protocol_data(gc); xmlnode *response_node, *tmp_node, *data_node; xmlnode *host_node = NULL, *port_node = NULL, *cookie_node = NULL, *tls_node = NULL; gboolean use_tls; @@ -142,7 +171,7 @@ "response as XML: %s\n", response); /* Note to translators: %s in this string is a URL */ msg = generate_error_message(response_node, - URL_START_OSCAR_SESSION); + get_start_oscar_session_url(od)); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg); g_free(msg); @@ -165,7 +194,7 @@ purple_debug_error("oscar", "startOSCARSession response was " "missing statusCode: %s\n", response); msg = generate_error_message(response_node, - URL_START_OSCAR_SESSION); + get_start_oscar_session_url(od)); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg); g_free(msg); @@ -203,7 +232,7 @@ else { char *msg; msg = generate_error_message(response_node, - URL_START_OSCAR_SESSION); + get_start_oscar_session_url(od)); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_OTHER_ERROR, msg); g_free(msg); @@ -216,15 +245,13 @@ g_free(tmp); /* Make sure we have everything else */ - if (data_node == NULL || host_node == NULL || - port_node == NULL || cookie_node == NULL || - (use_tls && tls_node == NULL)) + if (data_node == NULL || host_node == NULL || port_node == NULL || cookie_node == NULL) { char *msg; purple_debug_error("oscar", "startOSCARSession response was missing " "something: %s\n", response); msg = generate_error_message(response_node, - URL_START_OSCAR_SESSION); + get_start_oscar_session_url(od)); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg); g_free(msg); @@ -237,17 +264,21 @@ tmp = xmlnode_get_data_unescaped(port_node); *cookie = xmlnode_get_data_unescaped(cookie_node); - if (use_tls) - *tls_certname = xmlnode_get_data_unescaped(tls_node); + if (use_tls) { + if (tls_node != NULL) { + *tls_certname = xmlnode_get_data_unescaped(tls_node); + } else { + purple_debug_warning("oscar", "useTls was 1, but we haven't received a tlsCertName to use. We will not do SSL to BOS.\n"); + } + } - if (*host == NULL || **host == '\0' || tmp == NULL || *tmp == '\0' || *cookie == NULL || **cookie == '\0' || - (use_tls && (*tls_certname == NULL || **tls_certname == '\0'))) + if (*host == NULL || **host == '\0' || tmp == NULL || *tmp == '\0' || *cookie == NULL || **cookie == '\0') { char *msg; purple_debug_error("oscar", "startOSCARSession response was missing " "something: %s\n", response); msg = generate_error_message(response_node, - URL_START_OSCAR_SESSION); + get_start_oscar_session_url(od)); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg); g_free(msg); @@ -284,7 +315,7 @@ /* Note to translators: The first %s is a URL, the second is an error message. */ tmp = g_strdup_printf(_("Error requesting %s: %s"), - URL_START_OSCAR_SESSION, error_message); + get_start_oscar_session_url(od), error_message); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp); g_free(tmp); @@ -326,9 +357,9 @@ oscar_get_ui_info_int(od->icq ? "prpl-icq-distid" : "prpl-aim-distid", 0x00000611), get_client_key(od), hosttime, use_tls); - signature = generate_signature("GET", URL_START_OSCAR_SESSION, + signature = generate_signature("GET", get_start_oscar_session_url(od), query_string, session_key); - url = g_strdup_printf(URL_START_OSCAR_SESSION "?%s&sig_sha256=%s", + url = g_strdup_printf("%s?%s&sig_sha256=%s", get_start_oscar_session_url(od), query_string, signature); g_free(query_string); g_free(signature); @@ -367,6 +398,7 @@ */ static gboolean parse_client_login_response(PurpleConnection *gc, const gchar *response, gsize response_len, char **token, char **secret, time_t *hosttime) { + OscarData *od = purple_connection_get_protocol_data(gc); xmlnode *response_node, *tmp_node, *data_node; xmlnode *secret_node = NULL, *hosttime_node = NULL, *token_node = NULL, *tokena_node = NULL; char *tmp; @@ -379,7 +411,7 @@ purple_debug_error("oscar", "clientLogin could not parse " "response as XML: %s\n", response); msg = generate_error_message(response_node, - URL_CLIENT_LOGIN); + get_client_login_url(od)); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg); g_free(msg); @@ -403,7 +435,7 @@ purple_debug_error("oscar", "clientLogin response was " "missing statusCode: %s\n", response); msg = generate_error_message(response_node, - URL_CLIENT_LOGIN); + get_client_login_url(od)); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg); g_free(msg); @@ -446,7 +478,7 @@ } else { char *msg; msg = generate_error_message(response_node, - URL_CLIENT_LOGIN); + get_client_login_url(od)); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_OTHER_ERROR, msg); g_free(msg); @@ -465,7 +497,7 @@ purple_debug_error("oscar", "clientLogin response was missing " "something: %s\n", response); msg = generate_error_message(response_node, - URL_CLIENT_LOGIN); + get_client_login_url(od)); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg); g_free(msg); @@ -483,7 +515,7 @@ purple_debug_error("oscar", "clientLogin response was missing " "something: %s\n", response); msg = generate_error_message(response_node, - URL_CLIENT_LOGIN); + get_client_login_url(od)); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, msg); g_free(msg); @@ -520,10 +552,10 @@ gchar *tmp; if (error_message != NULL) tmp = g_strdup_printf(_("Error requesting %s: %s"), - URL_CLIENT_LOGIN, error_message); + get_client_login_url(od), error_message); else tmp = g_strdup_printf(_("Error requesting %s"), - URL_CLIENT_LOGIN); + get_client_login_url(od)); purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp); g_free(tmp); @@ -599,7 +631,7 @@ /* Send the POST request */ od->url_data = purple_util_fetch_url_request_len_with_account( - purple_connection_get_account(gc), URL_CLIENT_LOGIN, + purple_connection_get_account(gc), get_client_login_url(od), TRUE, NULL, FALSE, request->str, FALSE, -1, client_login_cb, od); g_string_free(request, TRUE); diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/family_icbm.c --- a/libpurple/protocols/oscar/family_icbm.c Sat Oct 30 17:45:46 2010 +0000 +++ b/libpurple/protocols/oscar/family_icbm.c Mon Nov 01 05:26:01 2010 +0000 @@ -1691,7 +1691,7 @@ purple_debug_misc("oscar", "X-Status: Received XML reply\n"); if (xml) { GString *xstatus; - char *tmp1, *tmp2; + char *tmp1, *tmp2, *unescaped_xstatus; /* purple_debug_misc("oscar", "X-Status: XML reply: %s\n", xml); */ @@ -1709,29 +1709,32 @@ tmp1 += 12; tmp2 = strstr(tmp1, "</desc>"); if (tmp2 != NULL) { - if (xstatus->len > 0) + if (xstatus->len > 0 && tmp2 > tmp1) g_string_append(xstatus, " - "); g_string_append_len(xstatus, tmp1, tmp2 - tmp1); } } - if (xstatus->len > 0) { - purple_debug_misc("oscar", "X-Status reply: %s\n", xstatus->str); + unescaped_xstatus = purple_unescape_text(xstatus->str); + g_string_free(xstatus, TRUE); + if (*unescaped_xstatus) { + purple_debug_misc("oscar", "X-Status reply: %s\n", unescaped_xstatus); account = purple_connection_get_account(od->gc); buddy = purple_find_buddy(account, bn); presence = purple_buddy_get_presence(buddy); - status = purple_presence_get_active_status(presence); - purple_prpl_got_user_status(account, bn, - purple_status_get_id(status), - "message", xstatus->str, NULL); + status = purple_presence_get_status(presence, "mood"); + if (status) { + purple_prpl_got_user_status(account, bn, + "mood", + PURPLE_MOOD_NAME, purple_status_get_attr_string(status, PURPLE_MOOD_NAME), + PURPLE_MOOD_COMMENT, unescaped_xstatus, NULL); + } } - g_string_free(xstatus, TRUE); + g_free(unescaped_xstatus); } else { purple_debug_misc("oscar", "X-Status: Can't get XML reply string\n"); } } else { purple_debug_misc("oscar", "X-Status: 0x0004, 0x000b not an xstatus reply\n"); - /* if ((userfunc = aim_callhandler(od, snac->family, snac->subtype))) - ret = userfunc(od, conn, frame, channel, sn, reason); */ } } diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/family_icq.c --- a/libpurple/protocols/oscar/family_icq.c Sat Oct 30 17:45:46 2010 +0000 +++ b/libpurple/protocols/oscar/family_icq.c Mon Nov 01 05:26:01 2010 +0000 @@ -408,27 +408,27 @@ return 0; } -static int +static void gotalias(OscarData *od, struct aim_icq_info *info) { PurpleConnection *gc = od->gc; PurpleAccount *account = purple_connection_get_account(gc); - gchar who[16], *utf8; PurpleBuddy *b; + gchar *utf8 = oscar_utf8_try_convert(account, od, info->nick); - if (info->nick[0] && (utf8 = oscar_utf8_try_convert(account, od, info->nick))) { - if (info->for_auth_request) { - oscar_auth_recvrequest(gc, g_strdup_printf("%u", info->uin), utf8, info->auth_request_reason); - } else { + if (info->for_auth_request) { + oscar_auth_recvrequest(gc, g_strdup_printf("%u", info->uin), utf8, info->auth_request_reason); + } else { + if (utf8 && *utf8) { + gchar who[16]; g_snprintf(who, sizeof(who), "%u", info->uin); serv_got_alias(gc, who, utf8); if ((b = purple_find_buddy(account, who))) { purple_blist_node_set_string((PurpleBlistNode*)b, "servernick", utf8); } - g_free(utf8); } + g_free(utf8); } - return 1; } /** diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/family_oservice.c --- a/libpurple/protocols/oscar/family_oservice.c Sat Oct 30 17:45:46 2010 +0000 +++ b/libpurple/protocols/oscar/family_oservice.c Mon Nov 01 05:26:01 2010 +0000 @@ -1041,63 +1041,45 @@ static int aim_parse_extstatus(OscarData *od, FlapConnection *conn, aim_module_t *mod, FlapFrame *frame, aim_modsnac_t *snac, ByteStream *bs) { - guint16 type; - guint8 flags, length; - - type = byte_stream_get16(bs); - flags = byte_stream_get8(bs); - length = byte_stream_get8(bs); - - /* - * A flag of 0x01 could mean "this is the checksum we have for you" - * A flag of 0x40 could mean "I don't have your icon, upload it" - */ - - switch (type) { - case 0x0000: - case 0x0001: { /* buddy icon checksum */ - /* not sure what the difference between 1 and 0 is */ - guint8 *md5 = byte_stream_getraw(bs, length); + guint16 type = byte_stream_get16(bs); + if (type == 0x0000 || type == 0x0001) { + /* buddy icon checksum */ + /* not sure what the difference between 1 and 0 is */ + guint8 flags = byte_stream_get8(bs); + guint8 length = byte_stream_get8(bs); + guint8 *md5 = byte_stream_getraw(bs, length); - if ((flags == 0x00) || (flags == 0x41)) { - if (!flap_connection_getbytype(od, SNAC_FAMILY_BART) && !od->iconconnecting) { - od->iconconnecting = TRUE; - od->set_icon = TRUE; - aim_srv_requestnew(od, SNAC_FAMILY_BART); - } else { - PurpleAccount *account = purple_connection_get_account(od->gc); - PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account); - if (img == NULL) { - aim_ssi_delicon(od); - } else { - - purple_debug_info("oscar", - "Uploading icon to icon server\n"); - aim_bart_upload(od, purple_imgstore_get_data(img), - purple_imgstore_get_size(img)); - purple_imgstore_unref(img); - } - } - } else if (flags == 0x81) { + if ((flags == 0x00) || (flags == 0x41)) { + if (!flap_connection_getbytype(od, SNAC_FAMILY_BART) && !od->iconconnecting) { + od->iconconnecting = TRUE; + od->set_icon = TRUE; + aim_srv_requestnew(od, SNAC_FAMILY_BART); + } else { PurpleAccount *account = purple_connection_get_account(od->gc); PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account); - if (img == NULL) + if (img == NULL) { aim_ssi_delicon(od); - else { - aim_ssi_seticon(od, md5, length); + } else { + + purple_debug_info("oscar", + "Uploading icon to icon server\n"); + aim_bart_upload(od, purple_imgstore_get_data(img), + purple_imgstore_get_size(img)); purple_imgstore_unref(img); } } - - g_free(md5); - } break; + } else if (flags == 0x81) { + PurpleAccount *account = purple_connection_get_account(od->gc); + PurpleStoredImage *img = purple_buddy_icons_find_account_icon(account); + if (img == NULL) + aim_ssi_delicon(od); + else { + aim_ssi_seticon(od, md5, length); + purple_imgstore_unref(img); + } + } - case 0x0002: { - /* We just set an available message? */ - /* there is a second length that is just for the message */ - char *msg = byte_stream_getstr(bs, byte_stream_get16(bs)); - g_free(msg); - } break; + g_free(md5); } return 0; diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/flap_connection.c --- a/libpurple/protocols/oscar/flap_connection.c Sat Oct 30 17:45:46 2010 +0000 +++ b/libpurple/protocols/oscar/flap_connection.c Mon Nov 01 05:26:01 2010 +0000 @@ -435,11 +435,16 @@ aim_rxcallback_t userfunc; conn = data; + /* Explicitly added for debugging #5927. Don't re-order this, only + * consider removing it. + */ + purple_debug_info("oscar", "Destroying FLAP connection %p\n", conn); + od = conn->od; account = purple_connection_get_account(od->gc); - purple_debug_info("oscar", "Destroying oscar connection of " - "type 0x%04hx. Disconnect reason is %d\n", + purple_debug_info("oscar", "Destroying oscar connection (%p) of " + "type 0x%04hx. Disconnect reason is %d\n", conn, conn->type, conn->disconnect_reason); od->oscar_connections = g_slist_remove(od->oscar_connections, conn); @@ -575,7 +580,7 @@ return; purple_debug_info("oscar", "Scheduling destruction of FLAP " - "connection of type 0x%04hx\n", conn->type); + "connection %p of type 0x%04hx\n", conn, conn->type); conn->disconnect_reason = reason; g_free(conn->error_message); conn->error_message = g_strdup(error_message); diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/libaim.c --- a/libpurple/protocols/oscar/libaim.c Sat Oct 30 17:45:46 2010 +0000 +++ b/libpurple/protocols/oscar/libaim.c Mon Nov 01 05:26:01 2010 +0000 @@ -143,7 +143,7 @@ static void init_plugin(PurplePlugin *plugin) { - oscar_init(plugin); + oscar_init(plugin, FALSE); } PURPLE_INIT_PLUGIN(aim, init_plugin, info); diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/libicq.c --- a/libpurple/protocols/oscar/libicq.c Sat Oct 30 17:45:46 2010 +0000 +++ b/libpurple/protocols/oscar/libicq.c Mon Nov 01 05:26:01 2010 +0000 @@ -155,7 +155,7 @@ { PurpleAccountOption *option; - oscar_init(plugin); + oscar_init(plugin, TRUE); option = purple_account_option_string_new(_("Encoding"), "encoding", OSCAR_DEFAULT_CUSTOM_ENCODING); prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/oscar.c --- a/libpurple/protocols/oscar/oscar.c Sat Oct 30 17:45:46 2010 +0000 +++ b/libpurple/protocols/oscar/oscar.c Mon Nov 01 05:26:01 2010 +0000 @@ -612,6 +612,18 @@ aim_ssi_setpresence(od, presence | AIM_SSI_PRESENCE_FLAG_NORECENTBUDDIES); } +static const gchar *login_servers[] = { + AIM_DEFAULT_LOGIN_SERVER, + AIM_DEFAULT_SSL_LOGIN_SERVER, + ICQ_DEFAULT_LOGIN_SERVER, + ICQ_DEFAULT_SSL_LOGIN_SERVER, +}; + +static const gchar *get_login_server(gboolean is_icq, gboolean use_ssl) +{ + return login_servers[is_icq*2 + use_ssl]; +} + void oscar_login(PurpleAccount *account) { @@ -725,7 +737,7 @@ return; } - server = purple_account_get_string(account, "server", OSCAR_DEFAULT_SSL_LOGIN_SERVER); + server = purple_account_get_string(account, "server", get_login_server(od->icq, TRUE)); /* * If the account's server is what the oscar prpl has offered as @@ -734,27 +746,27 @@ * do what we know is best for them and change the setting out * from under them to the SSL login server. */ - if (!strcmp(server, OSCAR_DEFAULT_LOGIN_SERVER) || !strcmp(server, OSCAR_OLD_LOGIN_SERVER)) { + if (!strcmp(server, get_login_server(od->icq, FALSE))) { purple_debug_info("oscar", "Account uses SSL, so changing server to default SSL server\n"); - purple_account_set_string(account, "server", OSCAR_DEFAULT_SSL_LOGIN_SERVER); - server = OSCAR_DEFAULT_SSL_LOGIN_SERVER; + purple_account_set_string(account, "server", get_login_server(od->icq, TRUE)); + server = get_login_server(od->icq, TRUE); } newconn->gsc = purple_ssl_connect(account, server, purple_account_get_int(account, "port", OSCAR_DEFAULT_LOGIN_PORT), ssl_connection_established_cb, ssl_connection_error_cb, newconn); } else { - server = purple_account_get_string(account, "server", OSCAR_DEFAULT_LOGIN_SERVER); + server = purple_account_get_string(account, "server", get_login_server(od->icq, FALSE)); /* * See the comment above. We do the reverse here. If they don't want * SSL but their server is set to OSCAR_DEFAULT_SSL_LOGIN_SERVER, * set it back to the default. */ - if (!strcmp(server, OSCAR_DEFAULT_SSL_LOGIN_SERVER)) { + if (!strcmp(server, get_login_server(od->icq, TRUE))) { purple_debug_info("oscar", "Account does not use SSL, so changing server back to non-SSL\n"); - purple_account_set_string(account, "server", OSCAR_DEFAULT_LOGIN_SERVER); - server = OSCAR_DEFAULT_LOGIN_SERVER; + purple_account_set_string(account, "server", get_login_server(od->icq, FALSE)); + server = get_login_server(od->icq, FALSE); } newconn->connect_data = purple_proxy_connect(NULL, account, server, @@ -969,8 +981,8 @@ conn->cookie = g_memdup(cookie, cookielen); /* - * tls_certname is only set (and must be set if we get this far) if - * SSL is enabled. + * Use SSL only if the server provided us with a tls_certname. The server might not specify a tls_certname even if we requested to use TLS, + * and that is something we should be prepared to. */ if (tls_certname) { @@ -1292,6 +1304,8 @@ { PurpleConnection *gc; PurpleAccount *account; + PurpleBuddy *buddy = NULL; + PurpleStatus *previous_status = NULL; struct buddyinfo *bi; time_t time_idle = 0, signon = 0; int type = 0; @@ -1301,8 +1315,6 @@ aim_userinfo_t *info; char *message = NULL; char *itmsurl = NULL; - char *tmp; - const char *tmp2; gc = od->gc; account = purple_connection_get_account(gc); @@ -1314,6 +1326,11 @@ g_return_val_if_fail(info != NULL, 1); g_return_val_if_fail(info->bn != NULL, 1); + buddy = purple_find_buddy(account, info->bn); + if (buddy) { + previous_status = purple_presence_get_active_status(purple_buddy_get_presence(buddy)); + } + /* * If this is an AIM buddy and their name has formatting, set their * server alias. @@ -1377,40 +1394,33 @@ status_id = OSCAR_STATUS_ID_AVAILABLE; } - if (info->flags & AIM_FLAG_WIRELESS) - { + if (info->flags & AIM_FLAG_WIRELESS) { purple_prpl_got_user_status(account, info->bn, OSCAR_STATUS_ID_MOBILE, NULL); } else { purple_prpl_got_user_status_deactive(account, info->bn, OSCAR_STATUS_ID_MOBILE); } - if (info->status != NULL && info->status[0] != '\0') { - /* Grab the available message */ - message = oscar_encoding_to_utf8(info->status_encoding, info->status, info->status_len); + /* Empty status means we should unset the status message. NULL status means we should keep it from the previous active status. + * Same goes for itmsurl (which is available only for the "available" status). + */ + if (info->status != NULL) { + message = (info->status_len > 0) ? oscar_encoding_to_utf8(info->status_encoding, info->status, info->status_len) : NULL; + } else if (previous_status != NULL) { + message = g_strdup(purple_status_get_attr_string(previous_status, "message")); } - tmp2 = tmp = (message ? purple_markup_escape_text(message, -1) : NULL); - if (strcmp(status_id, OSCAR_STATUS_ID_AVAILABLE) == 0) { - if (info->itmsurl_encoding && info->itmsurl && info->itmsurl_len) { - /* Grab the iTunes Music Store URL */ - itmsurl = oscar_encoding_to_utf8(info->itmsurl_encoding, info->itmsurl, info->itmsurl_len); + if (info->itmsurl != NULL) { + itmsurl = (info->itmsurl_len > 0) ? oscar_encoding_to_utf8(info->itmsurl_encoding, info->itmsurl, info->itmsurl_len) : NULL; + } else if (previous_status != NULL && purple_status_is_available(previous_status)) { + itmsurl = g_strdup(purple_status_get_attr_string(previous_status, "itmsurl")); } - - if (tmp2 == NULL && itmsurl != NULL) - /* - * The message can't be NULL because NULL means it was the - * last attribute, so the itmsurl would get ignored below. - */ - tmp2 = ""; - - purple_prpl_got_user_status(account, info->bn, status_id, - "message", tmp2, "itmsurl", itmsurl, NULL); + purple_debug_info("oscar", "Activating status '%s' for buddy %s, message = '%s', itmsurl = '%s'\n", status_id, info->bn, message, itmsurl); + purple_prpl_got_user_status(account, info->bn, status_id, "message", message, "itmsurl", itmsurl, NULL); + } else { + purple_debug_info("oscar", "Activating status '%s' for buddy %s, message = '%s'\n", status_id, info->bn, message); + purple_prpl_got_user_status(account, info->bn, status_id, "message", message, NULL); } - else - purple_prpl_got_user_status(account, info->bn, status_id, "message", tmp2, NULL); - - g_free(tmp); g_free(message); g_free(itmsurl); @@ -4569,7 +4579,7 @@ od = purple_connection_get_protocol_data(gc); userinfo = aim_locate_finduserinfo(od, purple_buddy_get_name(b)); - oscar_user_info_append_status(gc, user_info, b, userinfo, /* strip_html_tags */ TRUE); + oscar_user_info_append_status(gc, user_info, b, userinfo, /* use_html_status */ FALSE); if (full) oscar_user_info_append_extra_info(gc, user_info, b, userinfo); @@ -4607,13 +4617,9 @@ message = purple_status_get_attr_string(status, "message"); if (message != NULL) { - gchar *tmp1, *tmp2; - tmp1 = purple_markup_strip_html(message); - purple_util_chrreplace(tmp1, '\n', ' '); - tmp2 = g_markup_escape_text(tmp1, -1); - ret = oscar_util_format_string(tmp2, purple_account_get_username(account)); - g_free(tmp1); - g_free(tmp2); + gchar *tmp = oscar_util_format_string(message, purple_account_get_username(account)); + ret = purple_markup_escape_text(tmp, -1); + g_free(tmp); } else if (purple_status_is_available(status)) { @@ -5666,13 +5672,13 @@ return FALSE; } -void oscar_init(PurplePlugin *plugin) +void oscar_init(PurplePlugin *plugin, gboolean is_icq) { PurplePluginProtocolInfo *prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin); PurpleAccountOption *option; static gboolean init = FALSE; - option = purple_account_option_string_new(_("Server"), "server", OSCAR_DEFAULT_LOGIN_SERVER); + option = purple_account_option_string_new(_("Server"), "server", get_login_server(is_icq, FALSE)); prpl_info->protocol_options = g_list_append(prpl_info->protocol_options, option); option = purple_account_option_int_new(_("Port"), "port", OSCAR_DEFAULT_LOGIN_PORT); diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/oscar.h --- a/libpurple/protocols/oscar/oscar.h Sat Oct 30 17:45:46 2010 +0000 +++ b/libpurple/protocols/oscar/oscar.h Mon Nov 01 05:26:01 2010 +0000 @@ -1304,7 +1304,7 @@ /* userinfo.c - displaying user information */ -void oscar_user_info_append_status(PurpleConnection *gc, PurpleNotifyUserInfo *user_info, PurpleBuddy *b, aim_userinfo_t *userinfo, gboolean strip_html_tags); +void oscar_user_info_append_status(PurpleConnection *gc, PurpleNotifyUserInfo *user_info, PurpleBuddy *b, aim_userinfo_t *userinfo, gboolean use_html_status); void oscar_user_info_append_extra_info(PurpleConnection *gc, PurpleNotifyUserInfo *user_info, PurpleBuddy *b, aim_userinfo_t *userinfo); void oscar_user_info_display_error(OscarData *od, guint16 error_reason, char *buddy); void oscar_user_info_display_icq(OscarData *od, struct aim_icq_info *info); diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/oscarcommon.h --- a/libpurple/protocols/oscar/oscarcommon.h Sat Oct 30 17:45:46 2010 +0000 +++ b/libpurple/protocols/oscar/oscarcommon.h Mon Nov 01 05:26:01 2010 +0000 @@ -32,10 +32,13 @@ #include "notify.h" #include "status.h" -#define OSCAR_DEFAULT_LOGIN_SERVER "login.messaging.aol.com" +#define AIM_DEFAULT_LOGIN_SERVER "login.oscar.aol.com" +#define AIM_DEFAULT_SSL_LOGIN_SERVER "slogin.oscar.aol.com" +#define ICQ_DEFAULT_LOGIN_SERVER "login.icq.com" +#define ICQ_DEFAULT_SSL_LOGIN_SERVER "slogin.icq.com" + #define OSCAR_DEFAULT_LOGIN_PORT 5190 -#define OSCAR_DEFAULT_SSL_LOGIN_SERVER "slogin.oscar.aol.com" -#define OSCAR_OLD_LOGIN_SERVER "login.oscar.aol.com" + #ifndef _WIN32 #define OSCAR_DEFAULT_CUSTOM_ENCODING "ISO-8859-1" #else @@ -96,4 +99,4 @@ gboolean oscar_offline_message(const PurpleBuddy *buddy); void oscar_format_username(PurpleConnection *gc, const char *nick); GList *oscar_actions(PurplePlugin *plugin, gpointer context); -void oscar_init(PurplePlugin *plugin); +void oscar_init(PurplePlugin *plugin, gboolean is_icq); diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/peer.c --- a/libpurple/protocols/oscar/peer.c Sat Oct 30 17:45:46 2010 +0000 +++ b/libpurple/protocols/oscar/peer.c Mon Nov 01 05:26:01 2010 +0000 @@ -879,7 +879,9 @@ } conn->verified_connect_data = purple_proxy_connect(NULL, account, - (conn->proxyip != NULL) ? conn->proxyip : PEER_PROXY_SERVER, + (conn->proxyip != NULL) + ? conn->proxyip + : (conn->od->icq ? ICQ_PEER_PROXY_SERVER : AIM_PEER_PROXY_SERVER), PEER_PROXY_PORT, peer_proxy_connection_established_cb, conn); if (conn->verified_connect_data != NULL) diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/peer.h --- a/libpurple/protocols/oscar/peer.h Sat Oct 30 17:45:46 2010 +0000 +++ b/libpurple/protocols/oscar/peer.h Mon Nov 01 05:26:01 2010 +0000 @@ -58,7 +58,8 @@ /* * For peer proxying */ -#define PEER_PROXY_SERVER "ars.oscar.aol.com" +#define AIM_PEER_PROXY_SERVER "ars.oscar.aol.com" +#define ICQ_PEER_PROXY_SERVER "ars.icq.com" #define PEER_PROXY_PORT 5190 /* The port we should always connect to */ #define PEER_PROXY_PACKET_VERSION 0x044a diff -r 555862567b38 -r 734c5c08b5dd libpurple/protocols/oscar/userinfo.c --- a/libpurple/protocols/oscar/userinfo.c Sat Oct 30 17:45:46 2010 +0000 +++ b/libpurple/protocols/oscar/userinfo.c Mon Nov 01 05:26:01 2010 +0000 @@ -173,17 +173,17 @@ * @param user_info A PurpleNotifyUserInfo object to which status information will be added * @param b The PurpleBuddy whose status is desired. This or the aim_userinfo_t (or both) must be passed to oscar_user_info_append_status(). * @param userinfo The aim_userinfo_t of the buddy whose status is desired. This or the PurpleBuddy (or both) must be passed to oscar_user_info_append_status(). - * @param strip_html_tags If strip_html_tags is TRUE, tags embedded in the status message will be stripped, returning a non-formatted string. The string will still be HTML escaped. + * @param use_html_status If TRUE, prefer HTML-formatted away message over plaintext available message. */ void -oscar_user_info_append_status(PurpleConnection *gc, PurpleNotifyUserInfo *user_info, PurpleBuddy *b, aim_userinfo_t *userinfo, gboolean strip_html_tags) +oscar_user_info_append_status(PurpleConnection *gc, PurpleNotifyUserInfo *user_info, PurpleBuddy *b, aim_userinfo_t *userinfo, gboolean use_html_status) { PurpleAccount *account = purple_connection_get_account(gc); OscarData *od; PurplePresence *presence = NULL; PurpleStatus *status = NULL; gchar *message = NULL, *itmsurl = NULL, *tmp; - gboolean is_away; + gboolean escaping_needed = TRUE; od = purple_connection_get_protocol_data(gc); @@ -205,9 +205,10 @@ the "message" attribute of the status contains only the plaintext message. */ if (userinfo) { - if ((userinfo->flags & AIM_FLAG_AWAY) && userinfo->away_len > 0 && userinfo->away != NULL && userinfo->away_encoding != NULL) { + if ((userinfo->flags & AIM_FLAG_AWAY) && use_html_status && userinfo->away_len > 0 && userinfo->away != NULL && userinfo->away_encoding != NULL) { /* Away message */ message = oscar_encoding_to_utf8(userinfo->away_encoding, userinfo->away, userinfo->away_len); + escaping_needed = FALSE; } else { /* * Available message or non-HTML away message (because that's @@ -227,44 +228,26 @@ itmsurl = g_strdup(purple_status_get_attr_string(status, "itmsurl")); } - is_away = ((status && !purple_status_is_available(status)) || - (userinfo && (userinfo->flags & AIM_FLAG_AWAY))); - - if (strip_html_tags) { - /* Away messages are HTML, but available messages were originally plain text. - * We therefore need to strip away messages but not available messages if we're asked to remove HTML tags. - */ - /* - * It seems like the above comment no longer applies. All messages need - * to be escaped. - */ - if (message) { - gchar *tmp2; - tmp = purple_markup_strip_html(message); - g_free(message); - tmp2 = g_markup_escape_text(tmp, -1); - g_free(tmp); - message = tmp2; - } - - } else { - if (itmsurl) { - tmp = g_strdup_printf("%s", - itmsurl, message); + if (message) { + tmp = oscar_util_format_string(message, purple_account_get_username(account)); + g_free(message); + message = tmp; + if (escaping_needed) { + tmp = purple_markup_escape_text(message, -1); g_free(message); message = tmp; } } - g_free(itmsurl); - if (message) { - tmp = oscar_util_format_string(message, purple_account_get_username(account)); + if (use_html_status && itmsurl) { + tmp = g_strdup_printf("%s", itmsurl, message); g_free(message); message = tmp; } if (b) { if (purple_presence_is_online(presence)) { + gboolean is_away = ((status && !purple_status_is_available(status)) || (userinfo && (userinfo->flags & AIM_FLAG_AWAY))); if (oscar_util_valid_name_icq(purple_buddy_get_name(b)) || is_away || !message || !(*message)) { /* Append the status name for online ICQ statuses, away AIM statuses, and for all buddies with no message. * If the status name and the message are the same, only show one. */ @@ -299,12 +282,22 @@ if (presence) { const char *mood; - const char *description; + const char *comment; + char *description; status = purple_presence_get_status(presence, "mood"); - mood = purple_status_get_attr_string(status, PURPLE_MOOD_NAME); - description = icq_get_custom_icon_description(mood); - if (description && *description) - purple_notify_user_info_add_pair(user_info, _("Mood"), _(description)); + mood = icq_get_custom_icon_description(purple_status_get_attr_string(status, PURPLE_MOOD_NAME)); + if (mood) { + comment = purple_status_get_attr_string(status, PURPLE_MOOD_COMMENT); + if (comment) { + char *escaped_comment = purple_markup_escape_text(comment, -1); + description = g_strdup_printf("%s (%s)", _(mood), escaped_comment); + g_free(escaped_comment); + } else { + description = g_strdup(_(mood)); + } + purple_notify_user_info_add_pair(user_info, _("Mood"), description); + g_free(description); + } } purple_notify_user_info_add_pair(user_info, _("Status"), message); @@ -458,7 +451,7 @@ } oscar_user_info_convert_and_add_hyperlink(account, od, user_info, _("Personal Web Page"), info->email, ""); if (buddy != NULL) - oscar_user_info_append_status(gc, user_info, buddy, /* aim_userinfo_t */ NULL, /* strip_html_tags */ FALSE); + oscar_user_info_append_status(gc, user_info, buddy, /* aim_userinfo_t */ NULL, /* use_html_status */ TRUE); oscar_user_info_convert_and_add(account, od, user_info, _("Additional Information"), info->info); purple_notify_user_info_add_section_break(user_info); @@ -504,7 +497,7 @@ PurpleNotifyUserInfo *user_info = purple_notify_user_info_new(); gchar *tmp = NULL, *info_utf8 = NULL, *base_profile_url = NULL; - oscar_user_info_append_status(gc, user_info, /* PurpleBuddy */ NULL, userinfo, /* strip_html_tags */ FALSE); + oscar_user_info_append_status(gc, user_info, /* PurpleBuddy */ NULL, userinfo, /* use_html_status */ TRUE); if ((userinfo->present & AIM_USERINFO_PRESENT_IDLE) && userinfo->idletime != 0) { tmp = purple_str_seconds_to_string(userinfo->idletime*60); diff -r 555862567b38 -r 734c5c08b5dd pidgin/gtkaccount.c --- a/pidgin/gtkaccount.c Sat Oct 30 17:45:46 2010 +0000 +++ b/pidgin/gtkaccount.c Mon Nov 01 05:26:01 2010 +0000 @@ -2468,6 +2468,7 @@ GtkWidget *alert; GdkPixbuf *prpl_icon; struct auth_request *aa; + gboolean have_valid_alias = alias && *alias; gc = purple_account_get_connection(account); if (message != NULL && *message == '\0') @@ -2475,9 +2476,9 @@ buffer = g_strdup_printf(_("%s%s%s%s wants to add you (%s) to his or her buddy list%s%s"), remote_user, - (alias != NULL ? " (" : ""), - (alias != NULL ? alias : ""), - (alias != NULL ? ")" : ""), + (have_valid_alias ? " (" : ""), + (have_valid_alias ? alias : ""), + (have_valid_alias ? ")" : ""), (id != NULL ? id : (purple_connection_get_display_name(gc) != NULL diff -r 555862567b38 -r 734c5c08b5dd pidgin/gtkdialogs.c --- a/pidgin/gtkdialogs.c Sat Oct 30 17:45:46 2010 +0000 +++ b/pidgin/gtkdialogs.c Mon Nov 01 05:26:01 2010 +0000 @@ -151,7 +151,7 @@ {N_("Bengali"), "bn", "Israt Jahan", "israt@ankur.org.bd"}, {N_("Bengali"), "bn", "Jamil Ahmed", "jamil@bengalinux.org"}, {N_("Bengali"), "bn", "Samia Nimatullah", "mailsamia2001@yahoo.com"}, - {N_("Bengali-India"), "bn", "Runa Bhattacharjee", "runab@fedoraproject.org"}, + {N_("Bengali-India"), "bn_IN", "Runa Bhattacharjee", "runab@fedoraproject.org"}, {N_("Bosnian"), "bs", "Lejla Hadzialic", "lejlah@gmail.com"}, {N_("Catalan"), "ca", "Josep Puigdemont", "josep.puigdemont@gmail.com"}, {N_("Valencian-Catalan"), "ca@valencia", "Toni Hermoso", "toniher@softcatala.org"}, diff -r 555862567b38 -r 734c5c08b5dd pidgin/minidialog.c --- a/pidgin/minidialog.c Sat Oct 30 17:45:46 2010 +0000 +++ b/pidgin/minidialog.c Mon Nov 01 05:26:01 2010 +0000 @@ -332,6 +332,7 @@ break; case PROP_CUSTOM_ICON: gtk_image_set_from_pixbuf(priv->icon, g_value_get_object(value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } diff -r 555862567b38 -r 734c5c08b5dd pidgin/plugins/win32/winprefs/winprefs.c --- a/pidgin/plugins/win32/winprefs/winprefs.c Sat Oct 30 17:45:46 2010 +0000 +++ b/pidgin/plugins/win32/winprefs/winprefs.c Mon Nov 01 05:26:01 2010 +0000 @@ -267,16 +267,15 @@ } static GtkWidget* get_config_frame(PurplePlugin *plugin) { - GtkWidget *ret, *vbox, *button, *language_sel; + GtkWidget *ret; + GtkWidget *vbox; + GtkWidget *button; char *run_key_val; char *tmp; ret = gtk_vbox_new(FALSE, 18); gtk_container_set_border_width(GTK_CONTAINER(ret), 12); - vbox = pidgin_make_frame(ret, _("Language")); - language_sel = gtk_option_menu_new(); - /* Autostart */ vbox = pidgin_make_frame(ret, _("Startup")); tmp = g_strdup_printf(_("_Start %s on Windows startup"), PIDGIN_NAME); diff -r 555862567b38 -r 734c5c08b5dd pidgin/win32/nsis/pidgin-installer.nsi --- a/pidgin/win32/nsis/pidgin-installer.nsi Sat Oct 30 17:45:46 2010 +0000 +++ b/pidgin/win32/nsis/pidgin-installer.nsi Mon Nov 01 05:26:01 2010 +0000 @@ -549,6 +549,7 @@ Delete "$INSTDIR\ca-certs\ValiCert_Class_2_VA.crt" Delete "$INSTDIR\ca-certs\VeriSign_Class3_Extended_Validation_CA.pem" Delete "$INSTDIR\ca-certs\Verisign_Class3_Primary_CA.pem" + Delete "$INSTDIR\ca-certs\VeriSign_Class_3_Public_Primary_Certification_Authority_-_G2.pem" Delete "$INSTDIR\ca-certs\VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem" Delete "$INSTDIR\ca-certs\VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5_2.pem" Delete "$INSTDIR\ca-certs\VeriSign_International_Server_Class_3_CA.pem" diff -r 555862567b38 -r 734c5c08b5dd po/ChangeLog --- a/po/ChangeLog Sat Oct 30 17:45:46 2010 +0000 +++ b/po/ChangeLog Mon Nov 01 05:26:01 2010 +0000 @@ -1,6 +1,9 @@ Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul +version 2.7.6 + version 2.7.5 + * German translation updated (Björn Voigt, Jochen Kemnade) * Romanian translation updated (Mişu Moldovan) version 2.7.4 diff -r 555862567b38 -r 734c5c08b5dd po/de.po --- a/po/de.po Sat Oct 30 17:45:46 2010 +0000 +++ b/po/de.po Mon Nov 01 05:26:01 2010 +0000 @@ -11,8 +11,8 @@ msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-10-21 00:11-0400\n" -"PO-Revision-Date: 2010-10-20 21:23+0200\n" +"POT-Creation-Date: 2010-10-28 19:57+0200\n" +"PO-Revision-Date: 2010-10-28 19:50+0200\n" "Last-Translator: Björn Voigt \n" "Language-Team: German \n" "Language: de\n" @@ -7843,10 +7843,10 @@ msgstr "Privatsphärenoptionen setzen..." msgid "Show Visible List" -msgstr "Zeige Liste „Sichtbar“" +msgstr "Zeige Liste „Immer sichtbar“" msgid "Show Invisible List" -msgstr "Zeige Liste „Unsichtbar“" +msgstr "Zeige Liste „Immer unsichtbar“" #. AIM actions msgid "Confirm Account" @@ -8115,13 +8115,13 @@ "einem Rechtsklick anklicken und „%s“ auswählen." msgid "Visible List" -msgstr "Liste Sichtbar" +msgstr "Liste \"Immer sichtbar\"" msgid "These buddies will see your status when you switch to \"Invisible\"" -msgstr "Diese Buddys werden Ihren Status sehen wenn Sie „unsichtbar“ sind" +msgstr "Diese Buddys werden Ihren Status sehen, wenn Sie „unsichtbar“ sind" msgid "Invisible List" -msgstr "Liste Unsichtbar" +msgstr "Liste \"Immer unsichtbar\"" msgid "These buddies will always see you as offline" msgstr "Für diese Buddys werden Sie immer als offline angezeigt" @@ -12448,6 +12448,9 @@ msgid "Lao" msgstr "Laotisch" +msgid "Maithili" +msgstr "Maithili" + msgid "Macedonian" msgstr "Makedonisch" diff -r 555862567b38 -r 734c5c08b5dd po/ro.po --- a/po/ro.po Sat Oct 30 17:45:46 2010 +0000 +++ b/po/ro.po Mon Nov 01 05:26:01 2010 +0000 @@ -15363,7 +15363,7 @@ "from http://pidgin.im/download/windows/ ." msgstr "" "Eroare la descărcarea GTK+ ($R2).$\\rAceastă componentă este necesară pentru " -"funcționarea Pidgin. Dacă reîncercarea eșuează, încercați varianta „Offline " +"funcţionarea Pidgin. Dacă reîncercarea eşuează, încercaţi varianta „Offline " "Installer” de la http://pidgin.im/download/windows/ ." #. $R2 will display the URL that the Debug Symbols failed to download from @@ -15372,7 +15372,7 @@ "use the 'Offline Installer' from http://pidgin.im/download/windows/ ." msgstr "" "Eroare la instalarea simbolurilor de depanare ($R2).$\\rDacă reîncercarea " -"eșuează, încercați varianta 'Offline Installer' from http://pidgin.im/" +"eşuează, încercaţi varianta 'Offline Installer' from http://pidgin.im/" "download/windows/ ." #. $R3 will display the URL that the Dictionary failed to download from @@ -15383,7 +15383,7 @@ "%20Pidgin#manual_win32_spellcheck_installation" msgstr "" "Eroare la instalarea verificării ortografice ($R3).$\\rDacă reîncercarea " -"eșuează, găsiți instrucțiuni de instalare manuală la: http://developer." +"eşuează, găsiţi instrucţiuni de instalare manuală la: http://developer." "pidgin.im/wiki/Installing%20Pidgin#manual_win32_spellcheck_installation" #. Installer Subsection Text @@ -15408,7 +15408,7 @@ "Runtime?" msgstr "" "Pidgin necesită o instalare GTK+ compatibilă (care nu pare să fie prezentă " -"deja).$\\rSigur doriți să omiteți instalarea bibliotecilor GTK+?" +"deja).$\\rSigur doriţi să omiteţi instalarea bibliotecilor GTK+?" #. Installer Subsection Text msgid "Shortcuts" diff -r 555862567b38 -r 734c5c08b5dd po/stats.pl --- a/po/stats.pl Sat Oct 30 17:45:46 2010 +0000 +++ b/po/stats.pl Mon Nov 01 05:26:01 2010 +0000 @@ -27,6 +27,7 @@ $lang{'ca@valencia'} = "Catalan (Valencian)"; $lang{'be@latin'} = "Belarusian (Latin)"; +$lang{bn_IN} = "Bengali-India"; $lang{en_AU} = "English (Australian)"; $lang{en_CA} = "English (Canadian)"; $lang{en_GB} = "English (British)"; diff -r 555862567b38 -r 734c5c08b5dd share/ca-certs/Makefile.am --- a/share/ca-certs/Makefile.am Sat Oct 30 17:45:46 2010 +0000 +++ b/share/ca-certs/Makefile.am Mon Nov 01 05:26:01 2010 +0000 @@ -15,6 +15,7 @@ ValiCert_Class_2_VA.pem \ Verisign_RSA_Secure_Server_CA.pem \ Verisign_Class3_Primary_CA.pem \ + VeriSign_Class_3_Public_Primary_Certification_Authority_-_G2.pem \ VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5.pem \ VeriSign_Class_3_Public_Primary_Certification_Authority_-_G5_2.pem diff -r 555862567b38 -r 734c5c08b5dd share/ca-certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G2.pem --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/ca-certs/VeriSign_Class_3_Public_Primary_Certification_Authority_-_G2.pem Mon Nov 01 05:26:01 2010 +0000 @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh +c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy +MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp +emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X +DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw +FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg +UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo +YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 +MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB +AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 +pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 +13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID +AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk +U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i +F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY +oJ2daZH9 +-----END CERTIFICATE-----