diff options
author | Julien Cristau <jcristau@debian.org> | 2010-04-26 19:42:16 +0200 |
---|---|---|
committer | William Jon McCann <jmccann@redhat.com> | 2010-06-16 17:13:39 -0400 |
commit | 4398357421555b0edae3f7b8b7f7256854e6bcf8 (patch) | |
tree | 40204168b3b1560d940fa10eb58c2f2302e6f843 | |
parent | 64483254bde06c4bec9ea3bd0a01419dba520e36 (diff) | |
download | gdm-4398357421555b0edae3f7b8b7f7256854e6bcf8.tar.gz |
xdmcp: disable IPV6_V6ONLY for ipv6 listening sockets
This allows ipv4 connections mapped to ipv6, in case the system default
is backwards.
https://bugzilla.gnome.org/show_bug.cgi?id=544730
-rw-r--r-- | daemon/gdm-xdmcp-display-factory.c | 8 | ||||
-rw-r--r-- | gui/simple-chooser/gdm-host-chooser-widget.c | 7 |
2 files changed, 15 insertions, 0 deletions
diff --git a/daemon/gdm-xdmcp-display-factory.c b/daemon/gdm-xdmcp-display-factory.c index 791bba3b..116cc97a 100644 --- a/daemon/gdm-xdmcp-display-factory.c +++ b/daemon/gdm-xdmcp-display-factory.c @@ -411,6 +411,14 @@ create_socket (struct addrinfo *ai) return sock; } +#if defined(ENABLE_IPV6) && defined(IPV6_V6ONLY) + if (ai->ai_family == AF_INET6) { + int zero = 0; + if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero)) < 0) + g_warning("setsockopt(IPV6_V6ONLY): %s", g_strerror(errno)); + } +#endif + if (bind (sock, ai->ai_addr, ai->ai_addrlen) < 0) { g_warning ("bind: %s", g_strerror (errno)); close (sock); diff --git a/gui/simple-chooser/gdm-host-chooser-widget.c b/gui/simple-chooser/gdm-host-chooser-widget.c index e6947287..0c8f46c9 100644 --- a/gui/simple-chooser/gdm-host-chooser-widget.c +++ b/gui/simple-chooser/gdm-host-chooser-widget.c @@ -544,6 +544,13 @@ xdmcp_init (GdmHostChooserWidget *widget) widget->priv->socket_fd = socket (AF_INET6, SOCK_DGRAM, 0); if (widget->priv->socket_fd != -1) { widget->priv->have_ipv6 = TRUE; +#ifdef IPV6_V6ONLY + { + int zero = 0; + if (setsockopt(widget->priv->socket_fd, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero)) < 0) + g_warning("setsockopt(IPV6_V6ONLY): %s", g_strerror(errno)); + } +#endif } #endif if (! widget->priv->have_ipv6) { |