From 00e1a2f0886e471d594c22dc14fc9d80ce5098c4 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 26 Apr 2012 00:01:31 +0000 Subject: Thu Apr 26 00:01:31 UTC 2012 --- extra/networkmanager/PKGBUILD | 15 ++- extra/networkmanager/dont-fight-over-ipv6.patch | 121 ++++++++++++++++++++++++ extra/networkmanager/initialize-GError.patch | 23 +++++ 3 files changed, 154 insertions(+), 5 deletions(-) create mode 100644 extra/networkmanager/dont-fight-over-ipv6.patch create mode 100644 extra/networkmanager/initialize-GError.patch (limited to 'extra/networkmanager') diff --git a/extra/networkmanager/PKGBUILD b/extra/networkmanager/PKGBUILD index 8d75599c2..7587d3e38 100644 --- a/extra/networkmanager/PKGBUILD +++ b/extra/networkmanager/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 156944 2012-04-23 09:09:38Z ibiru $ +# $Id: PKGBUILD 157134 2012-04-24 18:49:00Z heftig $ # Maintainer: Jan de Groot # Contri-butor: Wael Nasreddine # Contributor: Tor Krill @@ -8,7 +8,7 @@ pkgname=networkmanager _pkgname=NetworkManager pkgver=0.9.4.0 -pkgrel=2 +pkgrel=4 pkgdesc="Network Management daemon" arch=('i686' 'x86_64') license=('GPL') @@ -27,17 +27,22 @@ backup=('etc/NetworkManager/NetworkManager.conf') install=networkmanager.install #source=(http://cgit.freedesktop.org/$_pkgname/$_pkgname/snapshot/$_pkgname-master.tar.xz source=(http://ftp.gnome.org/pub/gnome/sources/$_pkgname/${pkgver:0:3}/$_pkgname-$pkgver.tar.xz - NetworkManager.conf disable_set_hostname.patch dnsmasq-path.patch) + NetworkManager.conf disable_set_hostname.patch dnsmasq-path.patch + initialize-GError.patch dont-fight-over-ipv6.patch) sha256sums=('eb4f124008b3d855a37205d03ef035b7218639cd7332bdae5567095977e93e0f' '44b048804c7c0b8b3b0c29b8632b6ad613c397d0a1635ec918e10c0fbcdadf21' '25056837ea92e559f09563ed817e3e0cd9333be861b8914e45f62ceaae2e0460' - '65124505048cc8396daf0242c9f5d532fa669b4bbca305998c248ab2329490cb') + '65124505048cc8396daf0242c9f5d532fa669b4bbca305998c248ab2329490cb' + '95c06ad34c131b1db0f28d6e78003bd8fd0a3ba903f76027381e3c4c411c6cb6' + 'cc66f2fdf59f4f9873a5b775421e1968861c5541d7e29b83b4d30351ad1f9e94') build() { cd $_pkgname-$pkgver patch -Np1 -i ../disable_set_hostname.patch patch -Np1 -i ../dnsmasq-path.patch + patch -Np1 -i ../initialize-GError.patch + patch -Np1 -i ../dont-fight-over-ipv6.patch ./configure \ --prefix=/usr \ @@ -50,9 +55,9 @@ build() { --with-dhcpcd=/sbin/dhcpcd \ --with-iptables=/usr/sbin/iptables \ --with-systemdsystemunitdir=/usr/lib/systemd/system \ + --with-udev-dir=/usr/lib/udev \ --with-resolvconf=/usr/sbin/resolvconf \ --with-session-tracking=ck \ - --with-wext=no \ --disable-static \ --enable-more-warnings=no \ --disable-wimax diff --git a/extra/networkmanager/dont-fight-over-ipv6.patch b/extra/networkmanager/dont-fight-over-ipv6.patch new file mode 100644 index 000000000..f7945335f --- /dev/null +++ b/extra/networkmanager/dont-fight-over-ipv6.patch @@ -0,0 +1,121 @@ +From 77de91e5a8b1c1993ae65c54b37e0411e78e6fe6 Mon Sep 17 00:00:00 2001 +From: Dan Winship +Date: Thu, 19 Apr 2012 18:27:12 +0000 +Subject: core: don't fight with the kernel over the default IPv6 route + +The kernel wants there to be a default route over every RA-ed IPv6 +interface, and it gets confused and annoyed if we remove that default +route and replace it with our own (causing it to effectively drop all +further RAs on the floor, which is particularly bad if some of the +information in the earlier RA had an expiration time). + +So, rather than replacing the kernel's default route(s), just add an +additional one of our own, with a lower (ie, higher priority) metric. + +https://bugzilla.redhat.com/show_bug.cgi?id=785772 +--- +diff --git a/src/nm-system.c b/src/nm-system.c +index 91153ec..4cebb13 100644 +--- a/src/nm-system.c ++++ b/src/nm-system.c +@@ -1023,7 +1023,7 @@ add_ip6_route_to_gateway (int ifindex, const struct in6_addr *gw) + } + + static int +-replace_default_ip6_route (int ifindex, const struct in6_addr *gw) ++add_default_ip6_route (int ifindex, const struct in6_addr *gw) + { + struct rtnl_route *route = NULL; + struct nl_sock *nlh; +@@ -1037,22 +1037,36 @@ replace_default_ip6_route (int ifindex, const struct in6_addr *gw) + route = nm_netlink_route_new (ifindex, AF_INET6, 0, + NMNL_PROP_SCOPE, RT_SCOPE_UNIVERSE, + NMNL_PROP_TABLE, RT_TABLE_MAIN, ++ NMNL_PROP_PRIO, 1, + NULL); + g_return_val_if_fail (route != NULL, -ENOMEM); + + /* Add the new default route */ +- err = nm_netlink_route6_add (route, &in6addr_any, 0, gw, NLM_F_REPLACE); +- if (err == -NLE_EXIST) { +- /* FIXME: even though we use NLM_F_REPLACE the kernel won't replace +- * the route if it's the same. Suppress the pointless error. +- */ ++ err = nm_netlink_route6_add (route, &in6addr_any, 0, gw, NLM_F_CREATE); ++ if (err == -NLE_EXIST) + err = 0; +- } + + rtnl_route_put (route); + return err; + } + ++static struct rtnl_route * ++find_static_default_routes (struct rtnl_route *route, ++ struct nl_addr *dst, ++ const char *iface, ++ gpointer user_data) ++{ ++ GList **def_routes = user_data; ++ ++ if ( nl_addr_get_prefixlen (dst) == 0 ++ && rtnl_route_get_protocol (route) == RTPROT_STATIC) { ++ rtnl_route_get (route); ++ *def_routes = g_list_prepend (*def_routes, route); ++ } ++ ++ return NULL; ++} ++ + /* + * nm_system_replace_default_ip6_route + * +@@ -1062,12 +1076,35 @@ replace_default_ip6_route (int ifindex, const struct in6_addr *gw) + gboolean + nm_system_replace_default_ip6_route (int ifindex, const struct in6_addr *gw) + { +- struct rtnl_route *gw_route = NULL; ++ GList *def_routes, *iter; ++ struct rtnl_route *route, *gw_route = NULL; + gboolean success = FALSE; + char *iface; + int err; + +- err = replace_default_ip6_route (ifindex, gw); ++ /* We can't just use NLM_F_REPLACE here like in the IPv4 case, because ++ * the kernel doesn't like it if we replace the default routes it ++ * creates. (See rh#785772.) So we delete any non-kernel default routes, ++ * and then add a new default route of our own with a lower metric than ++ * the kernel ones. ++ */ ++ def_routes = NULL; ++ nm_netlink_foreach_route (ifindex, AF_INET6, RT_SCOPE_UNIVERSE, TRUE, ++ find_static_default_routes, &def_routes); ++ for (iter = def_routes; iter; iter = iter->next) { ++ route = iter->data; ++ if (!nm_netlink_route_delete (route)) { ++ iface = nm_netlink_index_to_iface (ifindex); ++ nm_log_err (LOGD_DEVICE | LOGD_IP6, ++ "(%s): failed to delete existing IPv6 default route", ++ iface); ++ g_free (iface); ++ } ++ rtnl_route_put (route); ++ } ++ g_list_free (def_routes); ++ ++ err = add_default_ip6_route (ifindex, gw); + if (err == 0) + return TRUE; + +@@ -1091,7 +1128,7 @@ nm_system_replace_default_ip6_route (int ifindex, const struct in6_addr *gw) + goto out; + + /* Try adding the original route again */ +- err = replace_default_ip6_route (ifindex, gw); ++ err = add_default_ip6_route (ifindex, gw); + if (err != 0) { + nm_netlink_route_delete (gw_route); + nm_log_err (LOGD_DEVICE | LOGD_IP6, +-- +cgit v0.9.0.2-2-gbebe diff --git a/extra/networkmanager/initialize-GError.patch b/extra/networkmanager/initialize-GError.patch new file mode 100644 index 000000000..58f0b9cb3 --- /dev/null +++ b/extra/networkmanager/initialize-GError.patch @@ -0,0 +1,23 @@ +From 8bb278944496102a4afad46b53e1e8279425aaac Mon Sep 17 00:00:00 2001 +From: Jiří Klimeš +Date: Mon, 02 Apr 2012 14:37:55 +0000 +Subject: libnm-glib: initialize GError, else invalid free() crash can occur (rh #809123) + +--- +(limited to 'libnm-glib/nm-remote-settings.c') + +diff --git a/libnm-glib/nm-remote-settings.c b/libnm-glib/nm-remote-settings.c +index 9a81a8d..68aaeb4 100644 +--- a/libnm-glib/nm-remote-settings.c ++++ b/libnm-glib/nm-remote-settings.c +@@ -109,7 +109,7 @@ static void + _nm_remote_settings_ensure_inited (NMRemoteSettings *self) + { + NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self); +- GError *error; ++ GError *error = NULL; + + if (!priv->inited) { + if (!g_initable_init (G_INITABLE (self), NULL, &error)) { +-- +cgit v0.9.0.2-2-gbebe -- cgit v1.2.3-54-g00ecf