summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Cameron <brian.cameron@oracle.com>2011-04-07 11:54:53 -0500
committerBrian Cameron <brian.cameron@oracle.com>2011-04-07 11:54:53 -0500
commita2fe5714cce0d58f901df25fdbf43920f615ff51 (patch)
treee6c9b077e7d8207c9c5380252a1ea803995d1ed1
parentc0b6ee89fd01088b54932e9bd4454602adf55740 (diff)
downloadgdm-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.c12
-rw-r--r--daemon/gdm-xdmcp-display-factory.c2
-rw-r--r--gui/simple-chooser/gdm-host-chooser-widget.c2
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) {