Hello community, here is the log from the commit of package glib-networking for openSUSE:Factory checked in at 2013-06-05 11:52:13 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/glib-networking (Old) and /work/SRC/openSUSE:Factory/.glib-networking.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "glib-networking" Changes: -------- --- /work/SRC/openSUSE:Factory/glib-networking/glib-networking.changes 2013-04-26 15:44:13.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.glib-networking.new/glib-networking.changes 2013-06-05 11:52:14.000000000 +0200 @@ -1,0 +2,13 @@ +Wed May 1 08:16:29 UTC 2013 - [email protected] + +- Update to version 2.37.1: + + gnutls: + - bgo#695062: Fixed a hang while rehandshaking with gnutls 3.x. + - bgo#697754: Fixed a handshaking crash in multithreaded use. + + proxy/gnome: + - Fix "automatic" mode, which was mistakenly being treated as + "none". + - bgo#698936: Use this in Unity sessions as well as GNOME ones. + + Updated translations. + +------------------------------------------------------------------- Old: ---- glib-networking-2.36.1.tar.xz New: ---- glib-networking-2.37.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ glib-networking.spec ++++++ --- /var/tmp/diff_new_pack.HINYyD/_old 2013-06-05 11:52:15.000000000 +0200 +++ /var/tmp/diff_new_pack.HINYyD/_new 2013-06-05 11:52:15.000000000 +0200 @@ -17,12 +17,12 @@ Name: glib-networking -Version: 2.36.1 +Version: 2.37.1 Release: 0 Summary: Network-related GIO modules for glib License: LGPL-2.1+ Group: System/Libraries -Source: http://download.gnome.org/sources/glib-networking/2.36/%{name}-%{version}.tar.xz +Source: http://download.gnome.org/sources/glib-networking/2.37/%{name}-%{version}.tar.xz Source99: baselibs.conf # For directory ownership BuildRequires: dbus-1 ++++++ glib-networking-2.36.1.tar.xz -> glib-networking-2.37.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glib-networking-2.36.1/NEWS new/glib-networking-2.37.1/NEWS --- old/glib-networking-2.36.1/NEWS 2013-04-16 14:52:24.000000000 +0200 +++ new/glib-networking-2.37.1/NEWS 2013-04-30 22:26:59.000000000 +0200 @@ -1,4 +1,4 @@ -2.36.1 +2.37.1 ====== * gnutls: Fixed a bug that could cause hangs and/or bursts of CPU usage in some cases. (#696881, Olivier CrĂȘte) @@ -6,6 +6,18 @@ * gnutls: Fixed CFLAGS when building with gnutls in a different prefix. (#696519, Emmanuel Pacaud) + * gnutls: Fixed a hang while rehandshaking with gnutls 3.x (#695062, + Dan) + + * gnutls: Fixed a handshaking crash in multithreaded use (#697754, + Olivier CrĂȘte) + + * proxy/gnome: Fix "automatic" mode, which was mistakenly being + treated as "none" (Dan) + + * proxy/gnome: Use this in Unity sessions as well as GNOME ones. + (#698936, Iain Lane) + * New/Updated translations: Friulian, Indonesian, Turkish diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glib-networking-2.36.1/configure new/glib-networking-2.37.1/configure --- old/glib-networking-2.36.1/configure 2013-04-16 14:53:29.000000000 +0200 +++ new/glib-networking-2.37.1/configure 2013-04-30 22:34:55.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for glib-networking 2.36.1. +# Generated by GNU Autoconf 2.69 for glib-networking 2.37.1. # # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=glib&component=network>. # @@ -591,8 +591,8 @@ # Identity of this package. PACKAGE_NAME='glib-networking' PACKAGE_TARNAME='glib-networking' -PACKAGE_VERSION='2.36.1' -PACKAGE_STRING='glib-networking 2.36.1' +PACKAGE_VERSION='2.37.1' +PACKAGE_STRING='glib-networking 2.37.1' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=glib&component=network' PACKAGE_URL='' @@ -1412,7 +1412,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures glib-networking 2.36.1 to adapt to many kinds of systems. +\`configure' configures glib-networking 2.37.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1482,7 +1482,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of glib-networking 2.36.1:";; + short | recursive ) echo "Configuration of glib-networking 2.37.1:";; esac cat <<\_ACEOF @@ -1622,7 +1622,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -glib-networking configure 2.36.1 +glib-networking configure 2.37.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1991,7 +1991,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by glib-networking $as_me 2.36.1, which was +It was created by glib-networking $as_me 2.37.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2820,7 +2820,7 @@ # Define the identity of the package. PACKAGE='glib-networking' - VERSION='2.36.1' + VERSION='2.37.1' cat >>confdefs.h <<_ACEOF @@ -15309,7 +15309,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by glib-networking $as_me 2.36.1, which was +This file was extended by glib-networking $as_me 2.37.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -15375,7 +15375,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -glib-networking config.status 2.36.1 +glib-networking config.status 2.37.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glib-networking-2.36.1/configure.ac new/glib-networking-2.37.1/configure.ac --- old/glib-networking-2.36.1/configure.ac 2013-04-16 14:49:39.000000000 +0200 +++ new/glib-networking-2.37.1/configure.ac 2013-04-30 22:24:31.000000000 +0200 @@ -1,7 +1,7 @@ AC_PREREQ(2.65) AC_CONFIG_MACRO_DIR([m4]) -AC_INIT([glib-networking],[2.36.1],[http://bugzilla.gnome.org/enter_bug.cgi?product=glib&component=network]) +AC_INIT([glib-networking],[2.37.1],[http://bugzilla.gnome.org/enter_bug.cgi?product=glib&component=network]) AC_CONFIG_SRCDIR([proxy/libproxy/glibproxyresolver.h]) AC_CONFIG_HEADERS([config.h]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glib-networking-2.36.1/proxy/gnome/gproxyresolvergnome.c new/glib-networking-2.37.1/proxy/gnome/gproxyresolvergnome.c --- old/glib-networking-2.36.1/proxy/gnome/gproxyresolvergnome.c 2013-02-21 13:00:06.000000000 +0100 +++ new/glib-networking-2.37.1/proxy/gnome/gproxyresolvergnome.c 2013-04-30 15:29:57.000000000 +0200 @@ -225,14 +225,23 @@ resolver->pacrunner = NULL; } - if (resolver->mode != G_DESKTOP_PROXY_MODE_MANUAL) - return; - ignore_hosts = g_settings_get_strv (resolver->proxy_settings, GNOME_PROXY_IGNORE_HOSTS_KEY); g_simple_proxy_resolver_set_ignore_hosts (simple, ignore_hosts); g_strfreev (ignore_hosts); + if (resolver->mode == G_DESKTOP_PROXY_MODE_AUTO) + { + /* We use the base_resolver to handle ignore_hosts in the AUTO case, + * so we have to set a non-"direct://" default proxy so we can distinguish + * the two cases. + */ + g_simple_proxy_resolver_set_default_proxy (simple, "use-proxy:"); + } + + if (resolver->mode != G_DESKTOP_PROXY_MODE_MANUAL) + return; + host = g_settings_get_string (resolver->http_settings, GNOME_PROXY_HTTP_HOST_KEY); port = g_settings_get_int (resolver->http_settings, GNOME_PROXY_HTTP_PORT_KEY); if (host && *host) @@ -304,7 +313,8 @@ static gboolean g_proxy_resolver_gnome_is_supported (GProxyResolver *object) { - return !g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "gnome"); + return !g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "gnome") || + !g_strcmp0 (g_getenv ("DESKTOP_SESSION"), "ubuntu"); } static inline gchar ** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glib-networking-2.36.1/tls/gnutls/gtlsconnection-gnutls.c new/glib-networking-2.37.1/tls/gnutls/gtlsconnection-gnutls.c --- old/glib-networking-2.36.1/tls/gnutls/gtlsconnection-gnutls.c 2013-04-16 14:49:30.000000000 +0200 +++ new/glib-networking-2.37.1/tls/gnutls/gtlsconnection-gnutls.c 2013-04-16 15:10:17.000000000 +0200 @@ -134,6 +134,7 @@ gboolean started_handshake, handshaking, ever_handshaked; GTask *implicit_handshake; GError *handshake_error; + GByteArray *app_data_buf; gboolean closing, closed; @@ -297,6 +298,8 @@ g_clear_object (&gnutls->priv->peer_certificate); g_clear_object (&gnutls->priv->peer_certificate_tmp); + g_clear_pointer (&gnutls->priv->app_data_buf, g_byte_array_unref); + #ifdef HAVE_PKCS11 p11_kit_pin_unregister_callback (gnutls->priv->interaction_id, on_pin_prompt_callback, gnutls); @@ -544,7 +547,8 @@ } } - if (gnutls->priv->need_finish_handshake) + if (gnutls->priv->need_finish_handshake && + gnutls->priv->implicit_handshake) { GError *my_error = NULL; gboolean success; @@ -736,11 +740,6 @@ g_mutex_unlock (&gnutls->priv->op_mutex); return status; } - else if (status == GNUTLS_E_GOT_APPLICATION_DATA) - { - if (gnutls->priv->handshaking && G_IS_TLS_SERVER_CONNECTION (gnutls)) - return GNUTLS_E_AGAIN; - } else if ( #ifdef GNUTLS_E_PREMATURE_TERMINATION status == GNUTLS_E_PREMATURE_TERMINATION @@ -1167,6 +1166,20 @@ BEGIN_GNUTLS_IO (gnutls, G_IO_IN | G_IO_OUT, TRUE, cancellable); ret = gnutls_handshake (gnutls->priv->session); + if (ret == GNUTLS_E_GOT_APPLICATION_DATA) + { + guint8 buf[1024]; + + /* Got app data while waiting for rehandshake; buffer it and try again */ + ret = gnutls_record_recv (gnutls->priv->session, buf, sizeof (buf)); + if (ret > -1) + { + if (!gnutls->priv->app_data_buf) + gnutls->priv->app_data_buf = g_byte_array_new (); + g_byte_array_append (gnutls->priv->app_data_buf, buf, ret); + ret = GNUTLS_E_AGAIN; + } + } END_GNUTLS_IO (gnutls, G_IO_IN | G_IO_OUT, ret, _("Error performing TLS handshake: %s"), &error); @@ -1438,6 +1451,17 @@ { gssize ret; + if (gnutls->priv->app_data_buf && !gnutls->priv->handshaking) + { + ret = MIN (count, gnutls->priv->app_data_buf->len); + memcpy (buffer, gnutls->priv->app_data_buf->data, ret); + if (ret == gnutls->priv->app_data_buf->len) + g_clear_pointer (&gnutls->priv->app_data_buf, g_byte_array_unref); + else + g_byte_array_remove_range (gnutls->priv->app_data_buf, 0, ret); + return ret; + } + again: if (!claim_op (gnutls, G_TLS_CONNECTION_GNUTLS_OP_READ, blocking, cancellable, error)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/glib-networking-2.36.1/tls/tests/connection.c new/glib-networking-2.37.1/tls/tests/connection.c --- old/glib-networking-2.36.1/tls/tests/connection.c 2013-04-16 14:49:30.000000000 +0200 +++ new/glib-networking-2.37.1/tls/tests/connection.c 2013-04-16 15:10:17.000000000 +0200 @@ -1006,6 +1006,60 @@ g_main_context_unref (context); } +static void +test_write_during_handshake (TestConnection *test, + gconstpointer data) +{ + GIOStream *connection; + GError *error = NULL; + GMainContext *context; + GMainLoop *loop; + GOutputStream *ostream; + + g_test_bug ("697754"); + + connection = start_async_server_and_connect_to_it (test, G_TLS_AUTHENTICATION_REQUESTED); + test->client_connection = g_tls_client_connection_new (connection, test->identity, &error); + g_assert_no_error (error); + g_object_unref (connection); + + loop = g_main_loop_new (NULL, FALSE); + g_signal_connect (test->client_connection, "notify::accepted-cas", + G_CALLBACK (quit_loop_on_notify), loop); + + context = g_main_context_new (); + g_main_context_push_thread_default (context); + g_tls_connection_handshake_async (G_TLS_CONNECTION (test->client_connection), + G_PRIORITY_DEFAULT, + NULL, NULL, NULL); + g_main_context_pop_thread_default (context); + + /* Now run the (default GMainContext) loop, which is needed for + * the server side of things. The client-side handshake will run in + * a thread, but its callback will never be invoked because its + * context isn't running. + */ + g_main_loop_run (loop); + g_main_loop_unref (loop); + + /* At this point handshake_thread() has started (and maybe + * finished), but handshake_thread_completed() (and thus + * finish_handshake()) has not yet run. Make sure close doesn't + * block. + */ + + ostream = g_io_stream_get_output_stream (test->client_connection); + g_output_stream_write (ostream, TEST_DATA, TEST_DATA_LENGTH, + G_PRIORITY_DEFAULT, &error); + g_assert_no_error (error); + + /* We have to let the handshake_async() call finish now, or + * teardown_connection() will assert. + */ + g_main_context_iteration (context, TRUE); + g_main_context_unref (context); +} + int main (int argc, char *argv[]) @@ -1049,6 +1103,8 @@ setup_connection, test_close_immediately, teardown_connection); g_test_add ("/tls/connection/close-during-handshake", TestConnection, NULL, setup_connection, test_close_during_handshake, teardown_connection); + g_test_add ("/tls/connection/write-during-handshake", TestConnection, NULL, + setup_connection, test_write_during_handshake, teardown_connection); ret = g_test_run(); -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
