diff options
author | Brian Cameron <brian.cameron@oracle.com> | 2011-04-07 11:54:53 -0500 |
---|---|---|
committer | Brian Cameron <brian.cameron@oracle.com> | 2011-04-07 11:54:53 -0500 |
commit | a2fe5714cce0d58f901df25fdbf43920f615ff51 (patch) | |
tree | e6c9b077e7d8207c9c5380252a1ea803995d1ed1 | |
parent | c0b6ee89fd01088b54932e9bd4454602adf55740 (diff) | |
download | gdm-a2fe5714cce0d58f901df25fdbf43920f615ff51.tar.gz |
Fix bugzilla 627428 and strip ::ffff: in front of IPv4 addresses
This fixes XDMCP using IPv4 on IPv6-enabled networks.
-rw-r--r-- | common/gdm-address.c | 12 | ||||
-rw-r--r-- | daemon/gdm-xdmcp-display-factory.c | 2 | ||||
-rw-r--r-- | gui/simple-chooser/gdm-host-chooser-widget.c | 2 |
3 files changed, 12 insertions, 4 deletions
diff --git a/common/gdm-address.c b/common/gdm-address.c index dc9e8b3c..a39724fd 100644 --- a/common/gdm-address.c +++ b/common/gdm-address.c @@ -330,10 +330,18 @@ gdm_address_get_numeric_info (GdmAddress *address, } if (servp != NULL) { - *servp = g_strdup (serv); + if (g_str_has_prefix (serv, "::ffff:")) { + *servp = g_strdup (serv + 7); + } else { + *servp = g_strdup (serv); + } } if (hostp != NULL) { - *hostp = g_strdup (host); + if (g_str_has_prefix (host, "::ffff:")) { + *hostp = g_strdup (host + 7); + } else { + *hostp = g_strdup (host); + } } return ret; diff --git a/daemon/gdm-xdmcp-display-factory.c b/daemon/gdm-xdmcp-display-factory.c index 06fafae6..f62fdfbb 100644 --- a/daemon/gdm-xdmcp-display-factory.c +++ b/daemon/gdm-xdmcp-display-factory.c @@ -2889,7 +2889,7 @@ decode_packet (GIOChannel *source, return TRUE; } - ss_len = (int)gdm_sockaddr_len (&clnt_ss); + ss_len = (int) sizeof (clnt_ss); res = XdmcpFill (factory->priv->socket_fd, &factory->priv->buf, (XdmcpNetaddr)&clnt_ss, &ss_len); if G_UNLIKELY (! res) { diff --git a/gui/simple-chooser/gdm-host-chooser-widget.c b/gui/simple-chooser/gdm-host-chooser-widget.c index 352c1e27..3e8a2e26 100644 --- a/gui/simple-chooser/gdm-host-chooser-widget.c +++ b/gui/simple-chooser/gdm-host-chooser-widget.c @@ -208,7 +208,7 @@ decode_packet (GIOChannel *source, return TRUE; } - ss_len = (int)gdm_sockaddr_len (&clnt_ss); + ss_len = (int) sizeof (clnt_ss); res = XdmcpFill (widget->priv->socket_fd, &buf, (XdmcpNetaddr)&clnt_ss, &ss_len); if G_UNLIKELY (! res) { |