- Handle ipv6 link-local addresses better in network:/// (#212565)

f38
Alexander Larsson 18 years ago
parent 073d12291e
commit 2f191e0fd0

@ -0,0 +1,72 @@
--- gnome-vfs-2.16.2/libgnomevfs/gnome-vfs-dns-sd.c.ipv6 2006-11-30 13:40:48.000000000 +0100
+++ gnome-vfs-2.16.2/libgnomevfs/gnome-vfs-dns-sd.c 2006-11-30 14:28:48.000000000 +0100
@@ -1959,6 +1959,7 @@
struct sync_resolve_data {
AvahiSimplePoll *poll;
gboolean got_data;
+ gboolean got_link_local_ipv6;
char *host;
int port;
char *text;
@@ -1997,6 +1998,13 @@
data = user_data;
if (event == AVAHI_RESOLVER_FOUND) {
+ if (address->proto == AVAHI_PROTO_INET6 &&
+ address->data.ipv6.address[0] == 0xfe &&
+ address->data.ipv6.address[1] == 0x80) {
+ data->got_link_local_ipv6 = TRUE;
+ goto out;
+ }
+
data->got_data = TRUE;
avahi_address_snprint (a, sizeof(a), address);
data->host = g_strdup (a);
@@ -2005,7 +2013,7 @@
data->text = g_malloc (data->text_len);
avahi_string_list_serialize (txt, data->text, data->text_len);
}
-
+ out:
avahi_service_resolver_free (r);
avahi_simple_poll_quit (data->poll);
}
@@ -2090,8 +2098,13 @@
AvahiClient *client = NULL;
AvahiServiceResolver *sr;
int error;
+ AvahiProtocol protocol;
struct sync_resolve_data resolve_data = {0};
+ protocol = AVAHI_PROTO_UNSPEC;
+
+ retry:
+
simple_poll = avahi_simple_poll_new ();
resolve_data.poll = simple_poll;
if (simple_poll == NULL) {
@@ -2109,7 +2122,8 @@
return GNOME_VFS_ERROR_GENERIC;
}
- sr = avahi_service_resolver_new (client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC,
+ resolve_data.got_link_local_ipv6 = FALSE;
+ sr = avahi_service_resolver_new (client, AVAHI_IF_UNSPEC, protocol,
name, type, domain, AVAHI_PROTO_UNSPEC,
0, avahi_resolve_sync_callback, &resolve_data);
if (sr == NULL) {
@@ -2127,6 +2141,14 @@
avahi_client_free (client);
avahi_simple_poll_free (simple_poll);
+
+ if (resolve_data.got_link_local_ipv6) {
+ /* We ignore non-routable ipv6 link-local addresses here, because our
+ api doesn't give the iface, so they are useless. Prefer ipv4 address instead */
+ protocol = AVAHI_PROTO_INET;
+ goto retry;
+ }
+
if (resolve_data.got_data) {
*host = resolve_data.host;
*port = resolve_data.port;

@ -14,7 +14,7 @@
Summary: The GNOME virtual file-system libraries Summary: The GNOME virtual file-system libraries
Name: gnome-vfs2 Name: gnome-vfs2
Version: 2.17.91 Version: 2.17.91
Release: 1%{?dist} Release: 2%{?dist}
License: LGPL License: LGPL
Group: System Environment/Libraries Group: System Environment/Libraries
Source0: http://ftp.gnome.org/pub/gnome/source/gnome-vfs/2.17/gnome-vfs-%{version}.tar.bz2 Source0: http://ftp.gnome.org/pub/gnome/source/gnome-vfs/2.17/gnome-vfs-%{version}.tar.bz2
@ -69,6 +69,10 @@ Patch6: gnome-vfs-2.15.91-mailto-command.patch
# http://bugzilla.gnome.org/show_bug.cgi?id=356772 # http://bugzilla.gnome.org/show_bug.cgi?id=356772
Patch8: gnome-vfs-2.16.0-no-dbus.patch Patch8: gnome-vfs-2.16.0-no-dbus.patch
# We broke network: on link-local ipv6 addresses (#212565)
Patch9: gnome-vfs-2.16.2-ipv6-link-local.patch
%description %description
GNOME VFS is the GNOME virtual file system. It is the foundation of GNOME VFS is the GNOME virtual file system. It is the foundation of
the Nautilus file manager. It provides a modular architecture and the Nautilus file manager. It provides a modular architecture and
@ -121,6 +125,8 @@ shares (SMB) to applications using GNOME VFS.
%patch8 -p1 -b .no-dbus %patch8 -p1 -b .no-dbus
%patch9 -p1 -b .ipv6
%build %build
if pkg-config openssl ; then if pkg-config openssl ; then
@ -223,6 +229,9 @@ fi
%config %{_sysconfdir}/gnome-vfs-2.0/modules/smb-module.conf %config %{_sysconfdir}/gnome-vfs-2.0/modules/smb-module.conf
%changelog %changelog
* Wed Mar 7 2007 Alexander Larsson <alexl@redhat.com> - 2.17.91-2
- Handle ipv6 link-local addresses better in network:/// (#212565)
* Mon Feb 12 2007 Matthias Clasen <mclasen@redhat.com> - 2.17.91-1 * Mon Feb 12 2007 Matthias Clasen <mclasen@redhat.com> - 2.17.91-1
- Update to 2.17.91 - Update to 2.17.91

Loading…
Cancel
Save