diff options
author | Alexey Shvetsov <alexxy@gentoo.org> | 2011-08-15 02:46:03 +0400 |
---|---|---|
committer | Alexey Shvetsov <alexxy@gentoo.org> | 2011-08-15 02:46:03 +0400 |
commit | 98838c11d9002dd0c89ee2d6774bf220d0786d78 (patch) | |
tree | 5971c5eb624c0adf588ca1e93a374b17f7677365 /net-misc | |
parent | [app-cdr/k3b] Sync with tree (diff) | |
download | kde-98838c11d9002dd0c89ee2d6774bf220d0786d78.tar.gz kde-98838c11d9002dd0c89ee2d6774bf220d0786d78.tar.bz2 kde-98838c11d9002dd0c89ee2d6774bf220d0786d78.zip |
[net-misc] Sync nm ebuilds with gnome overlay
Diffstat (limited to 'net-misc')
23 files changed, 1642 insertions, 226 deletions
diff --git a/net-misc/networkmanager-openswan/Manifest b/net-misc/networkmanager-openswan/Manifest new file mode 100644 index 0000000000..709fdd0d45 --- /dev/null +++ b/net-misc/networkmanager-openswan/Manifest @@ -0,0 +1,2 @@ +DIST NetworkManager-openswan-0.8.999.tar.bz2 347155 RMD160 e4808f1499898375c0c56f1d438e359dfe509ddb SHA1 e96290d527b7436d46785e0f97e4edec1deec6dd SHA256 d4eb8f26ed259a52718f3564086b6278cbd147636fc6b8d13eec7707fd3cbdeb +EBUILD networkmanager-openswan-0.8.999.ebuild 992 RMD160 c56c142a7b84116192191bcdceef649c7cd7175a SHA1 72d59eba58f0ef7c9ee1a5e3a53862b645cb0afb SHA256 e93ff5eaa8ce85e10f0f8866f805b8b03cd9d2b0173fcc2641f7ffee51b7d63a diff --git a/net-misc/networkmanager-openswan/networkmanager-openswan-0.8.999.ebuild b/net-misc/networkmanager-openswan/networkmanager-openswan-0.8.999.ebuild new file mode 100644 index 0000000000..3fe1c4dc2a --- /dev/null +++ b/net-misc/networkmanager-openswan/networkmanager-openswan-0.8.999.ebuild @@ -0,0 +1,52 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI="4" +GNOME_TARBALL_SUFFIX="bz2" +GNOME_ORG_MODULE="NetworkManager-${PN##*-}" + +inherit gnome.org + +# NetworkManager likes itself with capital letters +MY_PN="${GNOME_ORG_MODULE}" + +DESCRIPTION="NetworkManager Openswan plugin" +HOMEPAGE="http://www.gnome.org/projects/NetworkManager/" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="gnome" + +RDEPEND=" + >=net-misc/networkmanager-${PV} + >=dev-libs/dbus-glib-0.74 + >=net-misc/vpnc-0.5 + gnome? ( + >=x11-libs/gtk+-3.0.0:3 + gnome-base/gnome-keyring + )" + +DEPEND="${RDEPEND} + sys-devel/gettext + dev-util/intltool + dev-util/pkgconfig" + +S="${WORKDIR}/${MY_PN}-${PV}" + +src_configure() { + ECONF="--disable-more-warnings + --disable-static + --with-dist-version=Gentoo + --with-gtkver=3.0 + $(use_with gnome)" + + econf ${ECONF} +} + +src_install() { + default + # Remove useless .la files + find "${D}" -name '*.la' -exec rm -f {} + +} diff --git a/net-misc/networkmanager-openvpn/Manifest b/net-misc/networkmanager-openvpn/Manifest new file mode 100644 index 0000000000..a7a53e9da0 --- /dev/null +++ b/net-misc/networkmanager-openvpn/Manifest @@ -0,0 +1,2 @@ +DIST NetworkManager-openvpn-0.8.9997.tar.xz 357808 RMD160 d51e5e483908c256bba36e59c907a946dd12e7a4 SHA1 c7843c340ddb4ed3e8fe1866d8a2eddd8a0f28dd SHA256 47aa4d73a3e2074cf7fe4c293213df00a2fd0f76e663b05e7178731a5faa2c02 +EBUILD networkmanager-openvpn-0.8.9997.ebuild 971 RMD160 fdd17e4575d042babb3690f088a1b18923b3b749 SHA1 afb37f6574aa2b780a3ea7718e799e33cbc257c3 SHA256 f574c027da0e0e849bf21a21ffb9cb6b107c61c71ed49ab8fe37cd0a1c55a963 diff --git a/net-misc/networkmanager-openvpn/networkmanager-openvpn-0.8.9997.ebuild b/net-misc/networkmanager-openvpn/networkmanager-openvpn-0.8.9997.ebuild new file mode 100644 index 0000000000..e4d0bddadd --- /dev/null +++ b/net-misc/networkmanager-openvpn/networkmanager-openvpn-0.8.9997.ebuild @@ -0,0 +1,50 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI="4" +GNOME_ORG_MODULE="NetworkManager-${PN##*-}" + +inherit gnome.org + +DESCRIPTION="NetworkManager OpenVPN plugin" +HOMEPAGE="http://www.gnome.org/projects/NetworkManager/" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="gnome test" + +RDEPEND=" + >=dev-libs/dbus-glib-0.74 + >=net-misc/networkmanager-${PV} + >=net-misc/openvpn-2.1_rc9 + gnome? ( + >=x11-libs/gtk+-2.91.4:3 + gnome-base/gnome-keyring + )" + +DEPEND="${RDEPEND} + sys-devel/gettext + >=dev-util/intltool-0.35 + dev-util/pkgconfig" + +# FAIL: (tls-import-data) unexpected 'ca' secret value +#RESTRICT="test" + +src_configure() { + ECONF="--disable-more-warnings + --disable-static + --with-dist-version=Gentoo + --with-gtkver=3.0 + $(use_with gnome) + $(use_with test tests)" + + econf ${ECONF} +} + +src_install() { + default + # Remove useless .la files + find "${D}" -name '*.la' -exec rm -f {} + +} diff --git a/net-misc/networkmanager-pptp/Manifest b/net-misc/networkmanager-pptp/Manifest new file mode 100644 index 0000000000..7b05069cdb --- /dev/null +++ b/net-misc/networkmanager-pptp/Manifest @@ -0,0 +1,2 @@ +DIST NetworkManager-pptp-0.8.999.tar.bz2 398827 RMD160 3063876b20a070a83d281398180f8ccd914fbd74 SHA1 5c758a68d2f9394c84e6863f9b35075605478927 SHA256 81cfbe647c1d155a9bf0e7e4d4f3fad4b54dce50fd7162964e7a0f5c85fb2325 +EBUILD networkmanager-pptp-0.8.999.ebuild 1037 RMD160 5e3cd98f0e531fd08a5f28b4d789607e36f2b354 SHA1 b692c45d6ae59e904fdf6976338d6fa78763cfcc SHA256 b790aa60e38968dca8670ef4ed779b00742b785040aa7b6bcaaa57e86ee1bd95 diff --git a/net-misc/networkmanager-pptp/networkmanager-pptp-0.8.999.ebuild b/net-misc/networkmanager-pptp/networkmanager-pptp-0.8.999.ebuild new file mode 100644 index 0000000000..8f5d0cb146 --- /dev/null +++ b/net-misc/networkmanager-pptp/networkmanager-pptp-0.8.999.ebuild @@ -0,0 +1,54 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI="4" +GNOME_TARBALL_SUFFIX="bz2" +GNOME_ORG_MODULE="NetworkManager-${PN##*-}" + +inherit gnome.org + +# NetworkManager likes itself with capital letters +MY_PN="${GNOME_ORG_MODULE}" + +DESCRIPTION="NetworkManager PPTP plugin" +HOMEPAGE="http://www.gnome.org/projects/NetworkManager/" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="gnome test" + +RDEPEND=" + >=net-misc/networkmanager-${PV} + >=dev-libs/dbus-glib-0.74 + net-dialup/ppp + net-dialup/pptpclient + gnome? ( + >=x11-libs/gtk+-2.91.4:3 + gnome-base/gnome-keyring + )" + +DEPEND="${RDEPEND} + sys-devel/gettext + dev-util/intltool + dev-util/pkgconfig" + +S="${WORKDIR}/${MY_PN}-${PV}" + +src_configure() { + ECONF="--disable-more-warnings + --disable-static + --with-dist-version=Gentoo + --with-gtkver=3.0 + $(use_with gnome) + $(use_with test tests)" + + econf ${ECONF} +} + +src_install() { + default + # Remove useless .la files + find "${D}" -name '*.la' -exec rm -f {} + +} diff --git a/net-misc/networkmanager-vpnc/Manifest b/net-misc/networkmanager-vpnc/Manifest new file mode 100644 index 0000000000..d95862c002 --- /dev/null +++ b/net-misc/networkmanager-vpnc/Manifest @@ -0,0 +1,2 @@ +DIST NetworkManager-vpnc-0.8.999.tar.bz2 404078 RMD160 9a507b6188834eb7369d3bc3123696e27af452f2 SHA1 370a2d0b96eb041eb4e99744b61090224c291758 SHA256 b3802070fb25872c9cc59d82bee27b6f8ec3c3feb36b5fd148a7da2b6371c3f3 +EBUILD networkmanager-vpnc-0.8.999.ebuild 1093 RMD160 a89ae1b76e0a479e22e9272c34f336e24f0b2241 SHA1 a13f880dbba87e8cec21ddd8216549953d56edbc SHA256 275a44fec8957f97bbfb81edbfb3ce24460622397c5d5746cb9f9708900249db diff --git a/net-misc/networkmanager-vpnc/networkmanager-vpnc-0.8.999.ebuild b/net-misc/networkmanager-vpnc/networkmanager-vpnc-0.8.999.ebuild new file mode 100644 index 0000000000..fa094133c7 --- /dev/null +++ b/net-misc/networkmanager-vpnc/networkmanager-vpnc-0.8.999.ebuild @@ -0,0 +1,56 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI="4" +GNOME_TARBALL_SUFFIX="bz2" +GNOME_ORG_MODULE="NetworkManager-${PN##*-}" + +inherit gnome.org + +# NetworkManager likes itself with capital letters +MY_PN="${GNOME_ORG_MODULE}" + +DESCRIPTION="NetworkManager VPNC plugin" +HOMEPAGE="http://www.gnome.org/projects/NetworkManager/" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="gnome test" + +RDEPEND=" + >=net-misc/networkmanager-${PV} + >=dev-libs/dbus-glib-0.74 + >=net-misc/vpnc-0.5 + gnome? ( + >=x11-libs/gtk+-2.91.4:3 + gnome-base/gnome-keyring + )" + +DEPEND="${RDEPEND} + sys-devel/gettext + dev-util/intltool + dev-util/pkgconfig" + +S="${WORKDIR}/${MY_PN}-${PV}" + +# XXX: https://bugzilla.gnome.org/show_bug.cgi?id=608348 +RESTRICT="test" + +src_configure() { + ECONF="--disable-more-warnings + --disable-static + --with-dist-version=Gentoo + --with-gtkver=3.0 + $(use_with gnome) + $(use_with test tests)" + + econf ${ECONF} +} + +src_install() { + default + # Remove useless .la files + find "${D}" -name '*.la' -exec rm -f {} + +} diff --git a/net-misc/networkmanager/Manifest b/net-misc/networkmanager/Manifest index 06ffdecdec..65e171cb09 100644 --- a/net-misc/networkmanager/Manifest +++ b/net-misc/networkmanager/Manifest @@ -1,26 +1,15 @@ ------BEGIN PGP SIGNED MESSAGE----- -Hash: SHA256 - +AUX 0.8.9997/0001-core-reset-auto-retries-counter-when-cable-is-replug.patch 2897 RMD160 9c785fc9b55e2ab9547032fff530bed630b50aaf SHA1 ac462296fd75a1c3eb495073b914f8fb0c22c712 SHA256 b922468b3f0589d26bac91e357850e36fd4f5e2ef83a97260e22efeba15853df +AUX 0.8.9997/0002-core-fix-auto-connect-to-hidden-SSIDs-rh-707406.patch 17368 RMD160 97a93f397a761c3ddabf4794b1c03f08cd8896a0 SHA1 961ab01a8e82d28210317586b8b81e2ce92a5644 SHA256 3af098a5f4976ebc6d6ddb48be5729459b671fe405803c73dc3abbbd41237879 +AUX 0.8.9997/0003-libnm-glib-fix-crash-for-AddAndActivateConnection-D-.patch 1001 RMD160 bb7e53f91317edc5c7d115f7b9050d453b4f8a37 SHA1 5664c768c268855900a3c1cc48b256fad0809173 SHA256 b615c9229e8db73232748eed32ccd79a43ddbd2ef0bc1840d16d6b9bb0554168 +AUX 0.8.9997/0004-policy-remove-invalid-mark-for-failed-connections-af.patch 4004 RMD160 5053ad9599c631bfe2a66003fca611a2df2d1904 SHA1 8538c631cad4345b426d001096417b5fee24a51e SHA256 71a08f0268e2770ac9caedf1a28c73d1cea52e0eafde10b018b7ed9f6fe19f19 +AUX 0.8.9997/0005-core-connections-failed-due-to-missing-secrets-are-r.patch 10428 RMD160 77721681e949772e70198615d5a7d6be80eb9268 SHA1 9749850390e03f94377ce7d1c6fda49615570770 SHA256 caca893f99b30fbf49ef5ecffb2d3ce807870764dab08ee1157d012fdf0ad81f +AUX 0.8.9997/0006-settings-do-not-crash-on-GetSecrets-in-case-of-missi.patch 1096 RMD160 d56e28db9ccc10c477dea9776820df058302fc17 SHA1 2865a254813760909f2766b5e3ad5d3409422d85 SHA256 b8f237e738b44a915f107bd041fef9411842fbe81682670787eb5e1fcdfb456c +AUX 0.8.9997/0007-keyfile-distinguish-better-between-string-x-int-list.patch 2287 RMD160 4898529deb4f9130a147f46e5f46f7adf857f9fd SHA1 e442a4b172a0870cb8fab1c90971f7c71c8cacf4 SHA256 3a039c42b6bf4fcddd9976fd0ce0df511beee287fbac182cc81513bf495c6e50 +AUX 0.8.9997/0008-keyfile-fix-integer-list-SSID-parsing-after-30c41a4b.patch 7194 RMD160 acccb59b7a334bd4b316926d091dc694361130d2 SHA1 775a4b24a0c4042b469e68c5097f207d6cab4dda SHA256 4a98509d78aa81231e4728921a6ff4ef38ab7936f1b616dce60114ef0e118e0d +AUX 0.8.9997/0009-libnm-util-default-to-allowing-IPv6-connections-to-f.patch 1297 RMD160 821f0406cfbf979fc8551aa64ff866c39146cbd7 SHA1 8befa6f47f2e0719c6a24e54cc006abb9c82581c SHA256 61582200e497e52fdd4ccb622628aca28065293e09e868e0d2d6e81b6fb6fd4f +AUX networkmanager-fix-tests.patch 589 RMD160 a63f0d4f908a32356baf78c7e7c9a68cd9e4d68c SHA1 9f1ed4418b124bae89f9849ce2560dd713565abc SHA256 c03a97751762864dc4dcfa6d9eeee1ea70b986bcd5830a6777cd7514ba647540 AUX nm-system-settings.conf 70 RMD160 c0d2be147383999b62cead86ab4333169e4ef277 SHA1 679ec8052b610969c148a2d34cd4da7a41484a76 SHA256 34f53d9ac1ad65eda6942dc3059117f60f6321059ca23f4fbfcc2f2edcae151f -DIST NetworkManager-0.8.9997.tar.bz2 1292433 RMD160 5bc989f181785cd3f2bbbc48dc4fdda4bd1437fa SHA1 98ad0b812e274603de2b803d279377fea0aacda4 SHA256 82556bcd52fbb0fce8fd1341549250cc4abedc4c0f6952d8139671bac2ed1418 -DIST ifnet-0.9.tar.bz2 5351 RMD160 a936dcd50fca5d8b89cd119223f4c4c9c6a8fc68 SHA1 f2fe16ee3b36698977ac48bbd17d60373336214d SHA256 e23addc579ec2f40ad8babb5073f15abc5f2368c6313e4a983999c54ef9479ed -EBUILD networkmanager-0.8.9997.ebuild 4022 RMD160 68cec0bbd549aa377ef7395d0b326d50e692f27a SHA1 4f28ff29301e635c175e56c72f4eb4054ee6c142 SHA256 72b43da802e93e181178af6cb39abfc70861a29d7ed88f4ae3162a69faedf74f -EBUILD networkmanager-9999.ebuild 4022 RMD160 68cec0bbd549aa377ef7395d0b326d50e692f27a SHA1 4f28ff29301e635c175e56c72f4eb4054ee6c142 SHA256 72b43da802e93e181178af6cb39abfc70861a29d7ed88f4ae3162a69faedf74f -MISC metadata.xml 1290 RMD160 1285a26b775a35451982a7c19e16dfd7b2d59554 SHA1 c530542e8a292173ca722cb6d96ced7ceb55dabf SHA256 924b5245838d35e16b8b99ba6585c434fd6938c6f99b4abec0d8ea8d0fad17ce ------BEGIN PGP SIGNATURE----- -Version: GnuPG v2.0.17 (GNU/Linux) - -iQIcBAEBCAAGBQJN/lkRAAoJEOf+E+/4L5LmpHgP/RLE0fgc+RMT/Xj10HjEexiG -SQrcWdrs5inW70LbRHcw5uDorrAU1KfWLDERAhDuVEgn67KGRK/KqhiN/o3PAF22 -AaxFeWJ6SGSQ3cHdADf7iCDTKIkGhn1CwupBEApdaP8egOkLI17zphpXn2y0NvBM -RzNy+Yl4fgmSVVm37YXgPEe9NfLFP+eFrO7YSovMBSQCDQ/XbgSlYJXNODVF5MQJ -smoMRBEjf05jEFGPAS4K+BbSCJV0ry6+xTjeJ6wytGAoj1o+H73VXSHNLTsjZevQ -6z55mCaz7+dBUq9GcuFO2a5N6F0Cl2RXVakypX2rFD5GbH7PAcFs3mL0skEhsr/c -n0wP+KtFrGzCy80jVI1h866OChhvlf+zZZZfcjwNRPyVWSa4jzXAnuPNpEE130xo -xVeqvcju1YiKje3Y05+hiBORuD7JeJcZER/bCvCTk9boogl8ptSNJAsHwRS2SZAU -ncKAeV+h6c8//o+OUO9ypWX/T6Fg4jKldO9asZOmM/T5w2vu+79cscBNDfTMLybv -zjEr5S4FjyxDfsfRFLZtrcVNParbDirrM4KTU7r5ZEAFXD83FonjI95sQr8N7gUa -tX5nPHzkr+FNdnSYyKGhD5MCwIGN37K78Y/yK271ICYvC/oWFvOHAOfzkuehhT/1 -i7oypXYFel3h4bfsi2ep -=w1/C ------END PGP SIGNATURE----- +AUX nm-system-settings.conf-ifnet 70 RMD160 c0d2be147383999b62cead86ab4333169e4ef277 SHA1 679ec8052b610969c148a2d34cd4da7a41484a76 SHA256 34f53d9ac1ad65eda6942dc3059117f60f6321059ca23f4fbfcc2f2edcae151f +DIST NetworkManager-0.8.9997.tar.xz 1700224 RMD160 f239535e89d456f3ad447f1300ed6ba80da2669f SHA1 77862c75821d9ff7e463ead61aa64e5544b72ee0 SHA256 68ca2912788eea6f3ed3048d48c76870862a8e640d6751ce280eee5ab51d7469 +EBUILD networkmanager-0.8.9997-r1.ebuild 3983 RMD160 0741f2c3c2cff402daa17810c4a9a7796eae6ba2 SHA1 1ffa1c94e75690c72fdbf76bdccd68aeed65af98 SHA256 496b409f553610117f620f05a0a881dc8e28a7e65344ede50f5ece3b3b35fc74 +MISC metadata.xml 1134 RMD160 36a4dacde74c89bc1af7f157ef207fa230a59b51 SHA1 4e390cba7624e7cbaab4fb2e9e1ee46878233855 SHA256 85772e89ece963160cad01865cb9c4a15020ad2eb0063ae53ab86daa38723799 diff --git a/net-misc/networkmanager/files/0.8.9997/0001-core-reset-auto-retries-counter-when-cable-is-replug.patch b/net-misc/networkmanager/files/0.8.9997/0001-core-reset-auto-retries-counter-when-cable-is-replug.patch new file mode 100644 index 0000000000..f6eb6bcdda --- /dev/null +++ b/net-misc/networkmanager/files/0.8.9997/0001-core-reset-auto-retries-counter-when-cable-is-replug.patch @@ -0,0 +1,80 @@ +From 9aa7efcf28a0230876fc6fc5be6dfee5f35d0630 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= <jklimes@redhat.com> +Date: Mon, 30 May 2011 12:07:41 +0100 +Subject: [PATCH] core: reset auto retries counter when cable is replugged + +When re-plugging we may be in a different network. So we should try the +compatible connections again. + +Based on a patch from Mikhail Efremov. +--- + src/nm-policy.c | 21 +++++++++++++++------ + 1 files changed, 15 insertions(+), 6 deletions(-) + +diff --git a/src/nm-policy.c b/src/nm-policy.c +index 194d111..b98fe32 100644 +--- a/src/nm-policy.c ++++ b/src/nm-policy.c +@@ -817,13 +817,17 @@ hostname_changed (NMManager *manager, GParamSpec *pspec, gpointer user_data) + } + + static void +-reset_retries_all (NMSettings *settings) ++reset_retries_all (NMSettings *settings, NMDevice *device) + { + GSList *connections, *iter; ++ GError *error = NULL; + + connections = nm_settings_get_connections (settings); +- for (iter = connections; iter; iter = g_slist_next (iter)) +- set_connection_auto_retries (NM_CONNECTION (iter->data), RETRIES_DEFAULT); ++ for (iter = connections; iter; iter = g_slist_next (iter)) { ++ if (!device || nm_device_interface_check_connection_compatible (NM_DEVICE_INTERFACE (device), iter->data, &error)) ++ set_connection_auto_retries (NM_CONNECTION (iter->data), RETRIES_DEFAULT); ++ g_clear_error (&error); ++ } + g_slist_free (connections); + } + +@@ -838,7 +842,7 @@ sleeping_changed (NMManager *manager, GParamSpec *pspec, gpointer user_data) + + /* Reset retries on all connections so they'll checked on wakeup */ + if (sleeping || !enabled) +- reset_retries_all (policy->settings); ++ reset_retries_all (policy->settings, NULL); + } + + static void +@@ -932,6 +936,11 @@ device_state_changed (NMDevice *device, + update_routing_and_dns (policy, FALSE); + break; + case NM_DEVICE_STATE_DISCONNECTED: ++ /* Clear INVALID_TAG when carrier on. If cable was unplugged ++ * and plugged again, we should try to reconnect */ ++ if (reason == NM_DEVICE_STATE_REASON_CARRIER && old_state == NM_DEVICE_STATE_UNAVAILABLE) ++ reset_retries_all (policy->settings, device); ++ + /* Device is now available for auto-activation */ + update_routing_and_dns (policy, FALSE); + schedule_activate_check (policy, device, 0); +@@ -1058,7 +1067,7 @@ connections_loaded (NMSettings *settings, gpointer user_data) + // that by calling reset_retries_all() in nm_policy_new() + + /* Initialize connections' auto-retries */ +- reset_retries_all (settings); ++ reset_retries_all (settings, NULL); + + schedule_activate_all ((NMPolicy *) user_data); + } +@@ -1188,7 +1197,7 @@ nm_policy_new (NMManager *manager, + connection_visibility_changed); + + /* Initialize connections' auto-retries */ +- reset_retries_all (policy->settings); ++ reset_retries_all (policy->settings, NULL); + + initialized = TRUE; + return policy; +-- +1.7.6 + diff --git a/net-misc/networkmanager/files/0.8.9997/0002-core-fix-auto-connect-to-hidden-SSIDs-rh-707406.patch b/net-misc/networkmanager/files/0.8.9997/0002-core-fix-auto-connect-to-hidden-SSIDs-rh-707406.patch new file mode 100644 index 0000000000..565b01b973 --- /dev/null +++ b/net-misc/networkmanager/files/0.8.9997/0002-core-fix-auto-connect-to-hidden-SSIDs-rh-707406.patch @@ -0,0 +1,502 @@ +From 9549c70d943e3709694c4b0eb2595af11962c0eb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= <jklimes@redhat.com> +Date: Fri, 27 May 2011 17:32:40 +0200 +Subject: [PATCH] core: fix auto-connect to hidden SSIDs (rh #707406) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Previously (in NM 0.8.x) most WiFi connection were from user settings service. +And the service updated 'seen-bssids' property when got connected. +But the settings service in 0.9 don't do that. That inhibits auto-connecting to +hidden networks. This commit takes care of updating 'seen-bssids'. However, we +don't want to write out the conection each time it's activated (touching /etc). +So, seen BSSIDs are kept separately from the connection in a look-aside file. + +Signed-off-by: Jiří Klimeš <jklimes@redhat.com> +--- + src/nm-device-wifi.c | 30 +++++- + src/nm-manager.c | 44 ++----- + src/settings/nm-settings-connection.c | 216 +++++++++++++++++++++++++++++++-- + src/settings/nm-settings-connection.h | 9 ++ + src/settings/nm-settings.c | 3 + + 5 files changed, 256 insertions(+), 46 deletions(-) + +diff --git a/src/nm-device-wifi.c b/src/nm-device-wifi.c +index 7a6e752..7f9b5d2 100644 +--- a/src/nm-device-wifi.c ++++ b/src/nm-device-wifi.c +@@ -55,6 +55,7 @@ + #include "nm-setting-ip4-config.h" + #include "nm-setting-ip6-config.h" + #include "nm-system.h" ++#include "nm-settings-connection.h" + + static gboolean impl_device_get_access_points (NMDeviceWifi *device, + GPtrArray **aps, +@@ -978,6 +979,28 @@ get_active_ap (NMDeviceWifi *self, + } + + static void ++update_seen_bssids_cache (NMDeviceWifi *self, NMAccessPoint *ap) ++{ ++ NMActRequest *req; ++ NMConnection *connection; ++ ++ g_return_if_fail (ap != NULL); ++ ++ /* Don't cache the BSSID for Ad-Hoc APs */ ++ if (nm_ap_get_mode (ap) != NM_802_11_MODE_INFRA) ++ return; ++ ++ if (nm_device_get_state (NM_DEVICE (self)) == NM_DEVICE_STATE_ACTIVATED) { ++ req = nm_device_get_act_request (NM_DEVICE (self)); ++ if (req) { ++ connection = nm_act_request_get_connection (req); ++ nm_settings_connection_add_seen_bssid (NM_SETTINGS_CONNECTION (connection), ++ nm_ap_get_address (ap)); ++ } ++ } ++} ++ ++static void + set_current_ap (NMDeviceWifi *self, NMAccessPoint *new_ap) + { + NMDeviceWifiPrivate *priv; +@@ -1003,6 +1026,9 @@ set_current_ap (NMDeviceWifi *self, NMAccessPoint *new_ap) + */ + priv->ap_list = g_slist_remove (priv->ap_list, new_ap); + priv->ap_list = g_slist_prepend (priv->ap_list, new_ap); ++ ++ /* Update seen BSSIDs cache */ ++ update_seen_bssids_cache (self, priv->current_ap); + } + + /* Unref old AP here to ensure object lives if new_ap == old_ap */ +@@ -3436,11 +3462,13 @@ activation_success_handler (NMDevice *dev) + done: + periodic_update (self); + ++ /* Update seen BSSIDs cache with the connected AP */ ++ update_seen_bssids_cache (self, priv->current_ap); ++ + /* Reset scan interval to something reasonable */ + priv->scan_interval = SCAN_INTERVAL_MIN + (SCAN_INTERVAL_STEP * 2); + } + +- + static void + activation_failure_handler (NMDevice *dev) + { +diff --git a/src/nm-manager.c b/src/nm-manager.c +index 5a3f7f7..a15e4b7 100644 +--- a/src/nm-manager.c ++++ b/src/nm-manager.c +@@ -63,6 +63,7 @@ + #include "nm-settings-connection.h" + #include "nm-manager-auth.h" + #include "NetworkManagerUtils.h" ++#include "nm-utils.h" + + #define NM_AUTOIP_DBUS_SERVICE "org.freedesktop.nm_avahi_autoipd" + #define NM_AUTOIP_DBUS_IFACE "org.freedesktop.nm_avahi_autoipd" +@@ -1040,52 +1041,27 @@ manager_hidden_ap_found (NMDeviceInterface *device, + { + NMManager *manager = NM_MANAGER (user_data); + NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager); +- const struct ether_addr *ap_addr; +- const GByteArray *ap_ssid; ++ const struct ether_addr *bssid; + GSList *iter; + GSList *connections; + gboolean done = FALSE; + +- ap_ssid = nm_ap_get_ssid (ap); +- if (ap_ssid && ap_ssid->len) +- return; ++ g_return_if_fail (nm_ap_get_ssid (ap) == NULL); + +- ap_addr = nm_ap_get_address (ap); +- g_assert (ap_addr); ++ bssid = nm_ap_get_address (ap); ++ g_assert (bssid); + + /* Look for this AP's BSSID in the seen-bssids list of a connection, + * and if a match is found, copy over the SSID */ + connections = nm_settings_get_connections (priv->settings); +- + for (iter = connections; iter && !done; iter = g_slist_next (iter)) { + NMConnection *connection = NM_CONNECTION (iter->data); +- NMSettingWireless *s_wireless; +- const GByteArray *ssid; +- guint32 num_bssids; +- guint32 i; +- +- s_wireless = (NMSettingWireless *) nm_connection_get_setting (connection, NM_TYPE_SETTING_WIRELESS); +- if (!s_wireless) +- continue; +- +- num_bssids = nm_setting_wireless_get_num_seen_bssids (s_wireless); +- if (num_bssids < 1) +- continue; +- +- ssid = nm_setting_wireless_get_ssid (s_wireless); +- g_assert (ssid); +- +- for (i = 0; i < num_bssids && !done; i++) { +- const char *seen_bssid = nm_setting_wireless_get_seen_bssid (s_wireless, i); +- struct ether_addr seen_addr; ++ NMSettingWireless *s_wifi; + +- if (ether_aton_r (seen_bssid, &seen_addr)) { +- if (memcmp (ap_addr, &seen_addr, sizeof (struct ether_addr)) == 0) { +- /* Copy the SSID from the connection to the AP */ +- nm_ap_set_ssid (ap, ssid); +- done = TRUE; +- } +- } ++ s_wifi = nm_connection_get_setting_wireless (connection); ++ if (s_wifi) { ++ if (nm_settings_connection_has_seen_bssid (NM_SETTINGS_CONNECTION (connection), bssid)) ++ nm_ap_set_ssid (ap, nm_setting_wireless_get_ssid (s_wifi)); + } + } + g_slist_free (connections); +diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c +index 828a036..c20ba82 100644 +--- a/src/settings/nm-settings-connection.c ++++ b/src/settings/nm-settings-connection.c +@@ -22,6 +22,7 @@ + #include "config.h" + + #include <string.h> ++#include <netinet/ether.h> + + #include <NetworkManager.h> + #include <dbus/dbus-glib-lowlevel.h> +@@ -38,8 +39,10 @@ + #include "nm-manager-auth.h" + #include "nm-marshal.h" + #include "nm-agent-manager.h" ++#include "NetworkManagerUtils.h" + + #define SETTINGS_TIMESTAMPS_FILE LOCALSTATEDIR"/lib/NetworkManager/timestamps" ++#define SETTINGS_SEEN_BSSIDS_FILE LOCALSTATEDIR"/lib/NetworkManager/seen-bssids" + + static void impl_settings_connection_get_settings (NMSettingsConnection *connection, + DBusGMethodInvocation *context); +@@ -91,7 +94,8 @@ typedef struct { + NMSessionMonitor *session_monitor; + guint session_changed_id; + +- guint64 timestamp; /* Up-to-date timestamp of connection use */ ++ guint64 timestamp; /* Up-to-date timestamp of connection use */ ++ GHashTable *seen_bssids; /* Up-to-date BSSIDs that's been seen for the connection */ + } NMSettingsConnectionPrivate; + + /**************************************************************/ +@@ -455,12 +459,20 @@ commit_changes (NMSettingsConnection *connection, + } + + static void +-remove_timestamp_from_db (NMSettingsConnection *connection) ++remove_entry_from_db (NMSettingsConnection *connection, const char* db_name) + { +- GKeyFile *timestamps_file; ++ GKeyFile *key_file; ++ const char *db_file; + +- timestamps_file = g_key_file_new (); +- if (g_key_file_load_from_file (timestamps_file, SETTINGS_TIMESTAMPS_FILE, G_KEY_FILE_KEEP_COMMENTS, NULL)) { ++ if (strcmp (db_name, "timestamps") == 0) ++ db_file = SETTINGS_TIMESTAMPS_FILE; ++ else if (strcmp (db_name, "seen-bssids") == 0) ++ db_file = SETTINGS_SEEN_BSSIDS_FILE; ++ else ++ return; ++ ++ key_file = g_key_file_new (); ++ if (g_key_file_load_from_file (key_file, db_file, G_KEY_FILE_KEEP_COMMENTS, NULL)) { + const char *connection_uuid; + char *data; + gsize len; +@@ -468,18 +480,18 @@ remove_timestamp_from_db (NMSettingsConnection *connection) + + connection_uuid = nm_connection_get_uuid (NM_CONNECTION (connection)); + +- g_key_file_remove_key (timestamps_file, "timestamps", connection_uuid, NULL); +- data = g_key_file_to_data (timestamps_file, &len, &error); ++ g_key_file_remove_key (key_file, db_name, connection_uuid, NULL); ++ data = g_key_file_to_data (key_file, &len, &error); + if (data) { +- g_file_set_contents (SETTINGS_TIMESTAMPS_FILE, data, len, &error); ++ g_file_set_contents (db_file, data, len, &error); + g_free (data); + } + if (error) { +- nm_log_warn (LOGD_SETTINGS, "error writing timestamps file '%s': %s", SETTINGS_TIMESTAMPS_FILE, error->message); ++ nm_log_warn (LOGD_SETTINGS, "error writing %s file '%s': %s", db_name, db_file, error->message); + g_error_free (error); + } + } +- g_key_file_free (timestamps_file); ++ g_key_file_free (key_file); + } + + static void +@@ -499,7 +511,10 @@ do_delete (NMSettingsConnection *connection, + nm_agent_manager_delete_secrets (priv->agent_mgr, for_agents, FALSE, 0); + + /* Remove timestamp from timestamps database file */ +- remove_timestamp_from_db (connection); ++ remove_entry_from_db (connection, "timestamps"); ++ ++ /* Remove connection from seen-bssids database file */ ++ remove_entry_from_db (connection, "seen-bssids"); + + /* Signal the connection is removed and deleted */ + g_signal_emit (connection, signals[REMOVED], 0); +@@ -1440,6 +1455,181 @@ nm_settings_connection_read_and_fill_timestamp (NMSettingsConnection *connection + g_key_file_free (timestamps_file); + } + ++static guint ++mac_hash (gconstpointer v) ++{ ++ const guint8 *p = v; ++ guint32 i, h = 5381; ++ ++ for (i = 0; i < ETH_ALEN; i++) ++ h = (h << 5) + h + p[i]; ++ return h; ++} ++ ++static gboolean ++mac_equal (gconstpointer a, gconstpointer b) ++{ ++ return memcmp (a, b, ETH_ALEN) == 0; ++} ++ ++static guint8 * ++mac_dup (const struct ether_addr *old) ++{ ++ guint8 *new; ++ ++ g_return_val_if_fail (old != NULL, NULL); ++ ++ new = g_malloc0 (ETH_ALEN); ++ memcpy (new, old, ETH_ALEN); ++ return new; ++} ++ ++/** ++ * nm_settings_connection_has_seen_bssid: ++ * @connection: the #NMSettingsConnection ++ * @bssid: the BSSID to check the seen BSSID list for ++ * ++ * Returns: TRUE if the given @bssid is in the seen BSSIDs list ++ **/ ++gboolean ++nm_settings_connection_has_seen_bssid (NMSettingsConnection *connection, ++ const struct ether_addr *bssid) ++{ ++ g_return_val_if_fail (connection != NULL, FALSE); ++ g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (connection), FALSE); ++ g_return_val_if_fail (bssid != NULL, FALSE); ++ ++ return !!g_hash_table_lookup (NM_SETTINGS_CONNECTION_GET_PRIVATE (connection)->seen_bssids, bssid); ++} ++ ++/** ++ * nm_settings_connection_add_seen_bssid: ++ * @connection: the #NMSettingsConnection ++ * @seen_bssid: BSSID to set into the connection and to store into ++ * the seen-bssids database ++ * ++ * Updates the connection and seen-bssids database with the provided BSSID. ++ **/ ++void ++nm_settings_connection_add_seen_bssid (NMSettingsConnection *connection, ++ const struct ether_addr *seen_bssid) ++{ ++ NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (connection); ++ const char *connection_uuid; ++ GKeyFile *seen_bssids_file; ++ char *data, *bssid_str; ++ const char **list; ++ gsize len; ++ GError *error = NULL; ++ GHashTableIter iter; ++ guint n; ++ ++ g_return_if_fail (seen_bssid != NULL); ++ ++ if (g_hash_table_lookup (priv->seen_bssids, seen_bssid)) ++ return; /* Already in the list */ ++ ++ /* Add the new BSSID; let the hash take ownership of the allocated BSSID string */ ++ bssid_str = nm_ether_ntop (seen_bssid); ++ g_return_if_fail (bssid_str != NULL); ++ g_hash_table_insert (priv->seen_bssids, mac_dup (seen_bssid), bssid_str); ++ ++ /* Build up a list of all the BSSIDs in string form */ ++ n = 0; ++ list = g_malloc0 (g_hash_table_size (priv->seen_bssids) * sizeof (char *)); ++ g_hash_table_iter_init (&iter, priv->seen_bssids); ++ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &bssid_str)) ++ list[n++] = bssid_str; ++ ++ /* Save BSSID to seen-bssids file */ ++ seen_bssids_file = g_key_file_new (); ++ g_key_file_set_list_separator (seen_bssids_file, ','); ++ if (!g_key_file_load_from_file (seen_bssids_file, SETTINGS_SEEN_BSSIDS_FILE, G_KEY_FILE_KEEP_COMMENTS, &error)) { ++ if (!g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT)) { ++ nm_log_warn (LOGD_SETTINGS, "error parsing seen-bssids file '%s': %s", ++ SETTINGS_SEEN_BSSIDS_FILE, error->message); ++ } ++ g_clear_error (&error); ++ } ++ ++ connection_uuid = nm_connection_get_uuid (NM_CONNECTION (connection)); ++ g_key_file_set_string_list (seen_bssids_file, "seen-bssids", connection_uuid, list, n); ++ g_free (list); ++ ++ data = g_key_file_to_data (seen_bssids_file, &len, &error); ++ if (data) { ++ g_file_set_contents (SETTINGS_SEEN_BSSIDS_FILE, data, len, &error); ++ g_free (data); ++ } ++ g_key_file_free (seen_bssids_file); ++ ++ if (error) { ++ nm_log_warn (LOGD_SETTINGS, "error saving seen-bssids to file '%s': %s", ++ SETTINGS_SEEN_BSSIDS_FILE, error->message); ++ g_error_free (error); ++ } ++} ++ ++static void ++add_seen_bssid_string (NMSettingsConnection *self, const char *bssid) ++{ ++ struct ether_addr mac; ++ ++ g_return_if_fail (bssid != NULL); ++ if (ether_aton_r (bssid, &mac)) { ++ g_hash_table_insert (NM_SETTINGS_CONNECTION_GET_PRIVATE (self)->seen_bssids, ++ mac_dup (&mac), ++ g_strdup (bssid)); ++ } ++} ++ ++/** ++ * nm_settings_connection_read_and_fill_seen_bssids: ++ * @connection: the #NMSettingsConnection ++ * ++ * Retrieves seen BSSIDs of the connection from database file and stores then into the ++ * connection private data. ++ **/ ++void ++nm_settings_connection_read_and_fill_seen_bssids (NMSettingsConnection *connection) ++{ ++ NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (connection); ++ const char *connection_uuid; ++ GKeyFile *seen_bssids_file; ++ char **tmp_strv = NULL; ++ gsize i, len = 0; ++ NMSettingWireless *s_wifi; ++ ++ /* Get seen BSSIDs from database file */ ++ seen_bssids_file = g_key_file_new (); ++ g_key_file_set_list_separator (seen_bssids_file, ','); ++ if (g_key_file_load_from_file (seen_bssids_file, SETTINGS_SEEN_BSSIDS_FILE, G_KEY_FILE_KEEP_COMMENTS, NULL)) { ++ connection_uuid = nm_connection_get_uuid (NM_CONNECTION (connection)); ++ tmp_strv = g_key_file_get_string_list (seen_bssids_file, "seen-bssids", connection_uuid, &len, NULL); ++ } ++ g_key_file_free (seen_bssids_file); ++ ++ /* Update connection's seen-bssids */ ++ if (tmp_strv) { ++ g_hash_table_remove_all (priv->seen_bssids); ++ for (i = 0; i < len; i++) ++ add_seen_bssid_string (connection, tmp_strv[i]); ++ g_strfreev (tmp_strv); ++ } else { ++ /* If this connection didn't have an entry in the seen-bssids database, ++ * maybe this is the first time we've read it in, so populate the ++ * seen-bssids list from the deprecated seen-bssids property of the ++ * wifi setting. ++ */ ++ s_wifi = nm_connection_get_setting_wireless (NM_CONNECTION (connection)); ++ if (s_wifi) { ++ len = nm_setting_wireless_get_num_seen_bssids (s_wifi); ++ for (i = 0; i < len; i++) ++ add_seen_bssid_string (connection, nm_setting_wireless_get_seen_bssid (s_wifi, i)); ++ } ++ } ++} ++ + /**************************************************************/ + + static void +@@ -1463,6 +1653,8 @@ nm_settings_connection_init (NMSettingsConnection *self) + self); + + priv->agent_mgr = nm_agent_manager_get (); ++ ++ priv->seen_bssids = g_hash_table_new_full (mac_hash, mac_equal, g_free, g_free); + } + + static void +@@ -1490,6 +1682,8 @@ dispose (GObject *object) + nm_agent_manager_cancel_secrets (priv->agent_mgr, GPOINTER_TO_UINT (iter->data)); + g_slist_free (priv->reqs); + ++ g_hash_table_destroy (priv->seen_bssids); ++ + set_visible (self, FALSE); + + if (priv->session_changed_id) +diff --git a/src/settings/nm-settings-connection.h b/src/settings/nm-settings-connection.h +index 116bfdc..af90c51 100644 +--- a/src/settings/nm-settings-connection.h ++++ b/src/settings/nm-settings-connection.h +@@ -24,6 +24,7 @@ + + #include <nm-connection.h> + #include "nm-settings-flags.h" ++#include <net/ethernet.h> + + G_BEGIN_DECLS + +@@ -124,6 +125,14 @@ void nm_settings_connection_update_timestamp (NMSettingsConnection *connection, + + void nm_settings_connection_read_and_fill_timestamp (NMSettingsConnection *connection); + ++gboolean nm_settings_connection_has_seen_bssid (NMSettingsConnection *connection, ++ const struct ether_addr *bssid); ++ ++void nm_settings_connection_add_seen_bssid (NMSettingsConnection *connection, ++ const struct ether_addr *seen_bssid); ++ ++void nm_settings_connection_read_and_fill_seen_bssids (NMSettingsConnection *connection); ++ + G_END_DECLS + + #endif /* NM_SETTINGS_CONNECTION_H */ +diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c +index e23e8d1..8329780 100644 +--- a/src/settings/nm-settings.c ++++ b/src/settings/nm-settings.c +@@ -773,6 +773,9 @@ claim_connection (NMSettings *self, + /* Read timestamp from look-aside file and put it into the connection's data */ + nm_settings_connection_read_and_fill_timestamp (connection); + ++ /* Read seen-bssids from look-aside file and put it into the connection's data */ ++ nm_settings_connection_read_and_fill_seen_bssids (connection); ++ + /* Ensure it's initial visibility is up-to-date */ + nm_settings_connection_recheck_visibility (connection); + +-- +1.7.6 + diff --git a/net-misc/networkmanager/files/0.8.9997/0003-libnm-glib-fix-crash-for-AddAndActivateConnection-D-.patch b/net-misc/networkmanager/files/0.8.9997/0003-libnm-glib-fix-crash-for-AddAndActivateConnection-D-.patch new file mode 100644 index 0000000000..8cc16c4541 --- /dev/null +++ b/net-misc/networkmanager/files/0.8.9997/0003-libnm-glib-fix-crash-for-AddAndActivateConnection-D-.patch @@ -0,0 +1,29 @@ +From b4a72d1ad794aef4c623fd530fc38ceb9b95456d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= <jklimes@redhat.com> +Date: Tue, 14 Jun 2011 19:39:23 +0200 +Subject: [PATCH] libnm-glib: fix crash for AddAndActivateConnection() D-Bus + call (bgo #652512) + +When a partial connection is passed to nm_client_add_and_activate_connection(), +but it doesn't contain any settings, nm_connection_to_hash() returns NULL and +there's a crash later on the NULL hash. +--- + libnm-glib/nm-client.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/libnm-glib/nm-client.c b/libnm-glib/nm-client.c +index 644af3e..752510a 100644 +--- a/libnm-glib/nm-client.c ++++ b/libnm-glib/nm-client.c +@@ -763,7 +763,7 @@ nm_client_add_and_activate_connection (NMClient *client, + + if (partial) + hash = nm_connection_to_hash (partial, NM_SETTING_HASH_FLAG_ALL); +- else ++ if (!hash) + hash = g_hash_table_new (g_str_hash, g_str_equal); + + priv = NM_CLIENT_GET_PRIVATE (client); +-- +1.7.6 + diff --git a/net-misc/networkmanager/files/0.8.9997/0004-policy-remove-invalid-mark-for-failed-connections-af.patch b/net-misc/networkmanager/files/0.8.9997/0004-policy-remove-invalid-mark-for-failed-connections-af.patch new file mode 100644 index 0000000000..f2af25e1d5 --- /dev/null +++ b/net-misc/networkmanager/files/0.8.9997/0004-policy-remove-invalid-mark-for-failed-connections-af.patch @@ -0,0 +1,109 @@ +From fdfbe00aac3f17b19bb8d84cba1c8f210d90e8a0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= <jklimes@redhat.com> +Date: Fri, 17 Jun 2011 12:43:28 +0200 +Subject: [PATCH] policy: remove "invalid mark" for failed connections after 5 + mins + +If there is a temporary connection failure (e.g. due to unavailable DHCP), the +connection is marked as invalid after several retries. Reset the flag after +5 mins to allow next auto-reconnection. +--- + src/nm-policy.c | 47 +++++++++++++++++++++++++++++++++++++++++++++-- + 1 files changed, 45 insertions(+), 2 deletions(-) + +diff --git a/src/nm-policy.c b/src/nm-policy.c +index 3eead41..e3c899f 100644 +--- a/src/nm-policy.c ++++ b/src/nm-policy.c +@@ -66,12 +66,16 @@ struct NMPolicy { + + HostnameThread *lookup; + ++ gint reset_retries_id; /* idle handler for resetting the retries count */ ++ + char *orig_hostname; /* hostname at NM start time */ + char *cur_hostname; /* hostname we want to assign */ + }; + + #define RETRIES_TAG "autoconnect-retries" + #define RETRIES_DEFAULT 4 ++#define RESET_RETRIES_TIMESTAMP_TAG "reset-retries-timestamp-tag" ++#define RESET_RETRIES_TIMER 300 + + static NMDevice * + get_best_ip4_device (NMManager *manager, NMActRequest **out_req) +@@ -870,6 +874,37 @@ schedule_activate_check (NMPolicy *policy, NMDevice *device, guint delay_seconds + } + } + ++static gboolean ++reset_connections_retries (gpointer user_data) ++{ ++ NMPolicy *policy = (NMPolicy *) user_data; ++ GSList *connections, *iter; ++ time_t con_stamp, min_stamp, now; ++ ++ policy->reset_retries_id = 0; ++ ++ min_stamp = now = time (NULL); ++ connections = nm_settings_get_connections (policy->settings); ++ for (iter = connections; iter; iter = g_slist_next (iter)) { ++ con_stamp = GPOINTER_TO_SIZE (g_object_get_data (G_OBJECT (iter->data), RESET_RETRIES_TIMESTAMP_TAG)); ++ if (con_stamp == 0) ++ continue; ++ if (con_stamp + RESET_RETRIES_TIMER <= now) { ++ set_connection_auto_retries (NM_CONNECTION (iter->data), RETRIES_DEFAULT); ++ g_object_set_data (G_OBJECT (iter->data), RESET_RETRIES_TIMESTAMP_TAG, GSIZE_TO_POINTER (0)); ++ continue; ++ } ++ if (con_stamp < min_stamp) ++ min_stamp = con_stamp; ++ } ++ g_slist_free (connections); ++ ++ /* Schedule the handler again if there are some stamps left */ ++ if (min_stamp != now) ++ policy->reset_retries_id = g_timeout_add_seconds (RESET_RETRIES_TIMER - (now - min_stamp), reset_connections_retries, policy); ++ return FALSE; ++} ++ + static NMConnection * + get_device_connection (NMDevice *device) + { +@@ -914,8 +949,13 @@ device_state_changed (NMDevice *device, + set_connection_auto_retries (connection, tries - 1); + } + +- if (get_connection_auto_retries (connection) == 0) ++ if (get_connection_auto_retries (connection) == 0) { + nm_log_info (LOGD_DEVICE, "Marking connection '%s' invalid.", nm_connection_get_id (connection)); ++ /* Schedule a handler to reset retries count */ ++ g_object_set_data (G_OBJECT (connection), RESET_RETRIES_TIMESTAMP_TAG, GSIZE_TO_POINTER ((gsize) time (NULL))); ++ if (!policy->reset_retries_id) ++ policy->reset_retries_id = g_timeout_add_seconds (RESET_RETRIES_TIMER, reset_connections_retries, policy); ++ } + nm_connection_clear_secrets (connection); + } + schedule_activate_check (policy, device, 3); +@@ -938,7 +978,7 @@ device_state_changed (NMDevice *device, + update_routing_and_dns (policy, FALSE); + break; + case NM_DEVICE_STATE_DISCONNECTED: +- /* Clear INVALID_TAG when carrier on. If cable was unplugged ++ /* Reset RETRIES_TAG when carrier on. If cable was unplugged + * and plugged again, we should try to reconnect */ + if (reason == NM_DEVICE_STATE_REASON_CARRIER && old_state == NM_DEVICE_STATE_UNAVAILABLE) + reset_retries_all (policy->settings, device); +@@ -1246,6 +1286,9 @@ nm_policy_destroy (NMPolicy *policy) + } + g_slist_free (policy->dev_ids); + ++ if (policy->reset_retries_id) ++ g_source_remove (policy->reset_retries_id); ++ + g_free (policy->orig_hostname); + g_free (policy->cur_hostname); + +-- +1.7.6 + diff --git a/net-misc/networkmanager/files/0.8.9997/0005-core-connections-failed-due-to-missing-secrets-are-r.patch b/net-misc/networkmanager/files/0.8.9997/0005-core-connections-failed-due-to-missing-secrets-are-r.patch new file mode 100644 index 0000000000..f43cf24ba6 --- /dev/null +++ b/net-misc/networkmanager/files/0.8.9997/0005-core-connections-failed-due-to-missing-secrets-are-r.patch @@ -0,0 +1,280 @@ +From 69b767bbf0ef8e038dd8bd0bcb35586c0f91ade7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= <jklimes@redhat.com> +Date: Tue, 28 Jun 2011 15:48:12 +0200 +Subject: [PATCH] core: connections failed due to missing secrets are re-tried + when an secret agent registers (rh #706204) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Use case: +A user has an auto-activatable connection with secrets in a keyring. While +booting NM starts and tries to activate the connection, but it fails because of +missing secrets. Then the user logs in, but the connection is marked as invalid +and is not tried again. + +This commit solves the issue by removing invalid flag and activating the +connection when a secret agent registers. + +Signed-off-by: Jiří Klimeš <jklimes@redhat.com> +--- + src/nm-policy.c | 40 +++++++++++++++++++++++++++++++++++++++ + src/settings/nm-agent-manager.c | 22 +++++++++++++++++++++ + src/settings/nm-agent-manager.h | 4 +++ + src/settings/nm-settings.c | 25 ++++++++++++++++++++++++ + src/settings/nm-settings.h | 6 ++++- + 5 files changed, 96 insertions(+), 1 deletions(-) + +diff --git a/src/nm-policy.c b/src/nm-policy.c +index e3c899f..44f5e1f 100644 +--- a/src/nm-policy.c ++++ b/src/nm-policy.c +@@ -76,6 +76,7 @@ struct NMPolicy { + #define RETRIES_DEFAULT 4 + #define RESET_RETRIES_TIMESTAMP_TAG "reset-retries-timestamp-tag" + #define RESET_RETRIES_TIMER 300 ++#define FAILURE_REASON_TAG "failure-reason" + + static NMDevice * + get_best_ip4_device (NMManager *manager, NMActRequest **out_req) +@@ -838,6 +839,23 @@ reset_retries_all (NMSettings *settings, NMDevice *device) + } + + static void ++reset_retries_for_failed_secrets (NMSettings *settings) ++{ ++ GSList *connections, *iter; ++ ++ connections = nm_settings_get_connections (settings); ++ for (iter = connections; iter; iter = g_slist_next (iter)) { ++ NMDeviceStateReason reason = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (iter->data), FAILURE_REASON_TAG)); ++ ++ if (reason == NM_DEVICE_STATE_REASON_NO_SECRETS) { ++ set_connection_auto_retries (NM_CONNECTION (iter->data), RETRIES_DEFAULT); ++ g_object_set_data (G_OBJECT (iter->data), FAILURE_REASON_TAG, GUINT_TO_POINTER (0)); ++ } ++ } ++ g_slist_free (connections); ++} ++ ++static void + sleeping_changed (NMManager *manager, GParamSpec *pspec, gpointer user_data) + { + NMPolicy *policy = user_data; +@@ -927,6 +945,9 @@ device_state_changed (NMDevice *device, + NMPolicy *policy = (NMPolicy *) user_data; + NMConnection *connection = get_device_connection (device); + ++ if (connection) ++ g_object_set_data (G_OBJECT (connection), FAILURE_REASON_TAG, GUINT_TO_POINTER (0)); ++ + switch (new_state) { + case NM_DEVICE_STATE_FAILED: + /* Mark the connection invalid if it failed during activation so that +@@ -941,6 +962,11 @@ device_state_changed (NMDevice *device, + * automatically retrying because it's just going to fail anyway. + */ + set_connection_auto_retries (connection, 0); ++ ++ /* Mark the connection as failed due to missing secrets so that we can reset ++ * RETRIES_TAG and automatically re-try when an secret agent registers. ++ */ ++ g_object_set_data (G_OBJECT (connection), FAILURE_REASON_TAG, GUINT_TO_POINTER (NM_DEVICE_STATE_REASON_NO_SECRETS)); + } else if (tries > 0) { + /* Otherwise if it's a random failure, just decrease the number + * of automatic retries so that the connection gets tried again +@@ -1173,6 +1199,19 @@ connection_visibility_changed (NMSettings *settings, + } + + static void ++secret_agent_registered (NMSettings *settings, ++ NMSecretAgent *agent, ++ gpointer user_data) ++{ ++ /* The registered secret agent may provide some missing secrets. Thus we ++ * reset retries count here and schedule activation, so that the ++ * connections failed due to missing secrets may re-try auto-connection. ++ */ ++ reset_retries_for_failed_secrets (settings); ++ schedule_activate_all ((NMPolicy *) user_data); ++} ++ ++static void + _connect_manager_signal (NMPolicy *policy, const char *name, gpointer callback) + { + guint id; +@@ -1240,6 +1279,7 @@ nm_policy_new (NMManager *manager, + _connect_settings_signal (policy, NM_SETTINGS_SIGNAL_CONNECTION_REMOVED, connection_removed); + _connect_settings_signal (policy, NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED, + connection_visibility_changed); ++ _connect_settings_signal (policy, NM_SETTINGS_SIGNAL_AGENT_REGISTERED, secret_agent_registered); + + /* Initialize connections' auto-retries */ + reset_retries_all (policy->settings, NULL); +diff --git a/src/settings/nm-agent-manager.c b/src/settings/nm-agent-manager.c +index 9b9e189..1693ae2 100644 +--- a/src/settings/nm-agent-manager.c ++++ b/src/settings/nm-agent-manager.c +@@ -57,6 +57,14 @@ typedef struct { + GHashTable *requests; + } NMAgentManagerPrivate; + ++enum { ++ AGENT_REGISTERED, ++ ++ LAST_SIGNAL ++}; ++static guint signals[LAST_SIGNAL] = { 0 }; ++ ++ + typedef struct _Request Request; + + static void request_add_agent (Request *req, +@@ -277,6 +285,9 @@ impl_agent_manager_register (NMAgentManager *self, + nm_secret_agent_get_description (agent)); + dbus_g_method_return (context); + ++ /* Signal an agent was registered */ ++ g_signal_emit (self, signals[AGENT_REGISTERED], 0, agent); ++ + /* Add this agent to any in-progress secrets requests */ + g_hash_table_iter_init (&iter, priv->requests); + while (g_hash_table_iter_next (&iter, NULL, &data)) +@@ -1363,6 +1374,17 @@ nm_agent_manager_class_init (NMAgentManagerClass *agent_manager_class) + /* virtual methods */ + object_class->dispose = dispose; + ++ /* Signals */ ++ signals[AGENT_REGISTERED] = ++ g_signal_new ("agent-registered", ++ G_OBJECT_CLASS_TYPE (object_class), ++ G_SIGNAL_RUN_FIRST, ++ G_STRUCT_OFFSET (NMAgentManagerClass, agent_registered), ++ NULL, NULL, ++ g_cclosure_marshal_VOID__OBJECT, ++ G_TYPE_NONE, 1, ++ G_TYPE_OBJECT); ++ + dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (agent_manager_class), + &dbus_glib_nm_agent_manager_object_info); + +diff --git a/src/settings/nm-agent-manager.h b/src/settings/nm-agent-manager.h +index 788a917..287413a 100644 +--- a/src/settings/nm-agent-manager.h ++++ b/src/settings/nm-agent-manager.h +@@ -25,6 +25,7 @@ + #include <glib-object.h> + #include <nm-connection.h> + #include "nm-settings-flags.h" ++#include "nm-secret-agent.h" + + #define NM_TYPE_AGENT_MANAGER (nm_agent_manager_get_type ()) + #define NM_AGENT_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_AGENT_MANAGER, NMAgentManager)) +@@ -39,6 +40,9 @@ typedef struct { + + typedef struct { + GObjectClass parent; ++ ++ /* Signals */ ++ void (*agent_registered) (NMAgentManager *agent_mgr, NMSecretAgent *agent); + } NMAgentManagerClass; + + GType nm_agent_manager_get_type (void); +diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c +index 8329780..733e914 100644 +--- a/src/settings/nm-settings.c ++++ b/src/settings/nm-settings.c +@@ -135,6 +135,7 @@ enum { + CONNECTION_REMOVED, + CONNECTION_VISIBILITY_CHANGED, + CONNECTIONS_LOADED, ++ AGENT_REGISTERED, + + NEW_CONNECTION, /* exported, not used internally */ + LAST_SIGNAL +@@ -699,6 +700,18 @@ connection_visibility_changed (NMSettingsConnection *connection, + connection); + } + ++static void ++secret_agent_registered (NMAgentManager *agent_mgr, ++ NMSecretAgent *agent, ++ gpointer user_data) ++{ ++ /* Re-emit for listeners like NMPolicy */ ++ g_signal_emit (NM_SETTINGS (user_data), ++ signals[AGENT_REGISTERED], ++ 0, ++ agent); ++} ++ + #define NM_DBUS_SERVICE_OPENCONNECT "org.freedesktop.NetworkManager.openconnect" + #define NM_OPENCONNECT_KEY_GATEWAY "gateway" + #define NM_OPENCONNECT_KEY_COOKIE "cookie" +@@ -1530,6 +1543,8 @@ nm_settings_init (NMSettings *self) + * recreated often. + */ + priv->agent_mgr = nm_agent_manager_get (); ++ ++ g_signal_connect (priv->agent_mgr, "agent-registered", G_CALLBACK (secret_agent_registered), self); + } + + static void +@@ -1693,6 +1708,16 @@ nm_settings_class_init (NMSettingsClass *class) + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + ++ signals[AGENT_REGISTERED] = ++ g_signal_new (NM_SETTINGS_SIGNAL_AGENT_REGISTERED, ++ G_OBJECT_CLASS_TYPE (object_class), ++ G_SIGNAL_RUN_FIRST, ++ G_STRUCT_OFFSET (NMSettingsClass, agent_registered), ++ NULL, NULL, ++ g_cclosure_marshal_VOID__OBJECT, ++ G_TYPE_NONE, 1, G_TYPE_OBJECT); ++ ++ + signals[NEW_CONNECTION] = + g_signal_new ("new-connection", + G_OBJECT_CLASS_TYPE (object_class), +diff --git a/src/settings/nm-settings.h b/src/settings/nm-settings.h +index a5cb4d7..66d41cc 100644 +--- a/src/settings/nm-settings.h ++++ b/src/settings/nm-settings.h +@@ -19,7 +19,7 @@ + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * +- * (C) Copyright 2007 - 2010 Red Hat, Inc. ++ * (C) Copyright 2007 - 2011 Red Hat, Inc. + * (C) Copyright 2008 Novell, Inc. + */ + +@@ -31,6 +31,7 @@ + #include "nm-settings-connection.h" + #include "nm-system-config-interface.h" + #include "nm-device.h" ++#include "nm-secret-agent.h" + + #define NM_TYPE_SETTINGS (nm_settings_get_type ()) + #define NM_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SETTINGS, NMSettings)) +@@ -48,6 +49,7 @@ + #define NM_SETTINGS_SIGNAL_CONNECTION_REMOVED "connection-removed" + #define NM_SETTINGS_SIGNAL_CONNECTION_VISIBILITY_CHANGED "connection-visibility-changed" + #define NM_SETTINGS_SIGNAL_CONNECTIONS_LOADED "connections-loaded" ++#define NM_SETTINGS_SIGNAL_AGENT_REGISTERED "agent-registered" + + typedef struct { + GObject parent_instance; +@@ -68,6 +70,8 @@ typedef struct { + void (*connection_visibility_changed) (NMSettings *self, NMSettingsConnection *connection); + + void (*connections_loaded) (NMSettings *self); ++ ++ void (*agent_registered) (NMSettings *self, NMSecretAgent *agent); + } NMSettingsClass; + + GType nm_settings_get_type (void); +-- +1.7.6 + diff --git a/net-misc/networkmanager/files/0.8.9997/0006-settings-do-not-crash-on-GetSecrets-in-case-of-missi.patch b/net-misc/networkmanager/files/0.8.9997/0006-settings-do-not-crash-on-GetSecrets-in-case-of-missi.patch new file mode 100644 index 0000000000..b01842f6ec --- /dev/null +++ b/net-misc/networkmanager/files/0.8.9997/0006-settings-do-not-crash-on-GetSecrets-in-case-of-missi.patch @@ -0,0 +1,29 @@ +From 5b650f9ae3c5a2972b0b018b8b75d02d815f2c3a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= <jklimes@redhat.com> +Date: Thu, 7 Jul 2011 12:51:22 +0200 +Subject: [PATCH] settings: do not crash on GetSecrets() in case of missing + secrets + +When secrets are flagged as agent-owned in a connection configuration file, but +actually not available, we have to return an empty hash (nm_connection_to_hash() +returns NULL). +--- + src/settings/nm-settings-connection.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c +index a14b159..f0f9c1a 100644 +--- a/src/settings/nm-settings-connection.c ++++ b/src/settings/nm-settings-connection.c +@@ -1339,6 +1339,8 @@ dbus_get_agent_secrets_cb (NMSettingsConnection *self, + update_secrets_cache (self); + + hash = nm_connection_to_hash (NM_CONNECTION (self), NM_SETTING_HASH_FLAG_ONLY_SECRETS); ++ if (!hash) ++ hash = g_hash_table_new (NULL, NULL); + dbus_g_method_return (context, hash); + g_hash_table_destroy (hash); + } +-- +1.7.6 + diff --git a/net-misc/networkmanager/files/0.8.9997/0007-keyfile-distinguish-better-between-string-x-int-list.patch b/net-misc/networkmanager/files/0.8.9997/0007-keyfile-distinguish-better-between-string-x-int-list.patch new file mode 100644 index 0000000000..4206df112c --- /dev/null +++ b/net-misc/networkmanager/files/0.8.9997/0007-keyfile-distinguish-better-between-string-x-int-list.patch @@ -0,0 +1,70 @@ +From 30c41a4b800408150edcca9047a3996fa1d6ae68 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= <jklimes@redhat.com> +Date: Thu, 7 Jul 2011 15:25:11 +0200 +Subject: [PATCH] keyfile: distinguish better between string x int list + formats (bgo #649422) + +This commit enhances get_uchar_array() to better differentiate between string +ad integer list formats. This allows using ';' character in SSIDs. +--- + src/settings/plugins/keyfile/reader.c | 28 +++++++++++++--------------- + 1 files changed, 13 insertions(+), 15 deletions(-) + +diff --git a/src/settings/plugins/keyfile/reader.c b/src/settings/plugins/keyfile/reader.c +index 4b28965..7da6e1a 100644 +--- a/src/settings/plugins/keyfile/reader.c ++++ b/src/settings/plugins/keyfile/reader.c +@@ -16,7 +16,7 @@ + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Copyright (C) 2008 - 2009 Novell, Inc. +- * Copyright (C) 2008 - 2010 Red Hat, Inc. ++ * Copyright (C) 2008 - 2011 Red Hat, Inc. + */ + + #include <errno.h> +@@ -736,29 +736,27 @@ get_uchar_array (GKeyFile *keyfile, + const char *key) + { + GByteArray *array = NULL; +- char *p, *tmp_string; ++ char *tmp_string; + gint *tmp_list; + gsize length; + int i; + +- /* New format: just a string. We try parsing the new format if there are +- * no ';' in the string or it's not just numbers. ++ /* New format: just a string ++ * Old format: integer list; e.g. 11;25;38 + */ +- p = tmp_string = g_key_file_get_string (keyfile, setting_name, key, NULL); ++ tmp_string = g_key_file_get_string (keyfile, setting_name, key, NULL); + if (tmp_string) { + gboolean new_format = FALSE; ++ GRegex *regex; ++ GMatchInfo *match_info; ++ const char *pattern = "^[[:space:]]*[[:digit:]]+[[:space:]]*(;[[:space:]]*[[:digit:]]+[[:space:]]*)*(;[[:space:]]*)?$"; + +- if (strchr (p, ';') == NULL) +- new_format = TRUE; +- else { ++ regex = g_regex_new (pattern, 0, 0, NULL); ++ g_regex_match (regex, tmp_string, 0, &match_info); ++ if (!g_match_info_matches (match_info)) + new_format = TRUE; +- while (p && *p) { +- if (!isdigit (*p++)) { +- new_format = FALSE; +- break; +- } +- } +- } ++ g_match_info_free (match_info); ++ g_regex_unref (regex); + + if (new_format) { + array = g_byte_array_sized_new (strlen (tmp_string)); +-- +1.7.6 + diff --git a/net-misc/networkmanager/files/0.8.9997/0008-keyfile-fix-integer-list-SSID-parsing-after-30c41a4b.patch b/net-misc/networkmanager/files/0.8.9997/0008-keyfile-fix-integer-list-SSID-parsing-after-30c41a4b.patch new file mode 100644 index 0000000000..b4e0ef0712 --- /dev/null +++ b/net-misc/networkmanager/files/0.8.9997/0008-keyfile-fix-integer-list-SSID-parsing-after-30c41a4b.patch @@ -0,0 +1,211 @@ +From 9cdc5021ab0b94dbf1a0d1994bc2e5ba4049caf9 Mon Sep 17 00:00:00 2001 +From: Dan Williams <dcbw@redhat.com> +Date: Wed, 20 Jul 2011 17:44:14 -0500 +Subject: [PATCH 1/2] keyfile: fix integer list SSID parsing after + 30c41a4b800408150edcca9047a3996fa1d6ae68 + +The regex was capturing integers larger than 3 digits, which aren't +valid SSID integer list items because each byte of the SSID cannot be +larger than 255. Add an explicit testcase for intlist SSIDs too. +The previous regex was causing a testcase failure with an SSID of +'1337' which it was interpreting as a single element intlist, but +should have been interpreted as a string since it's clear > 255. +--- + src/settings/plugins/keyfile/reader.c | 2 +- + .../plugins/keyfile/tests/keyfiles/Makefile.am | 1 + + .../keyfile/tests/keyfiles/Test_Intlist_SSID | 11 ++ + src/settings/plugins/keyfile/tests/test-keyfile.c | 128 ++++++++++++++++++++ + 4 files changed, 141 insertions(+), 1 deletions(-) + create mode 100644 src/settings/plugins/keyfile/tests/keyfiles/Test_Intlist_SSID + +diff --git a/src/settings/plugins/keyfile/reader.c b/src/settings/plugins/keyfile/reader.c +index 7da6e1a..c4136e0 100644 +--- a/src/settings/plugins/keyfile/reader.c ++++ b/src/settings/plugins/keyfile/reader.c +@@ -749,7 +749,7 @@ get_uchar_array (GKeyFile *keyfile, + gboolean new_format = FALSE; + GRegex *regex; + GMatchInfo *match_info; +- const char *pattern = "^[[:space:]]*[[:digit:]]+[[:space:]]*(;[[:space:]]*[[:digit:]]+[[:space:]]*)*(;[[:space:]]*)?$"; ++ const char *pattern = "^[[:space:]]*[[:digit:]]{1,3}[[:space:]]*(;[[:space:]]*[[:digit:]]{1,3}[[:space:]]*)*(;[[:space:]]*)?$"; + + regex = g_regex_new (pattern, 0, 0, NULL); + g_regex_match (regex, tmp_string, 0, &match_info); +diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am +index ce5ff99..302db86 100644 +--- a/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am ++++ b/src/settings/plugins/keyfile/tests/keyfiles/Makefile.am +@@ -7,6 +7,7 @@ KEYFILES = \ + ATT_Data_Connect_BT \ + ATT_Data_Connect_Plain \ + Test_String_SSID \ ++ Test_Intlist_SSID \ + Test_Wired_TLS_Old \ + Test_Wired_TLS_New \ + Test_Wired_TLS_Blob \ +diff --git a/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlist_SSID b/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlist_SSID +new file mode 100644 +index 0000000..6d2bc0f +--- /dev/null ++++ b/src/settings/plugins/keyfile/tests/keyfiles/Test_Intlist_SSID +@@ -0,0 +1,11 @@ ++[connection] ++id=Test ++uuid=2f962388-e5f3-45af-a62c-ac220b8f7baa ++type=802-11-wireless ++ ++[802-11-wireless] ++ssid=98;108;97;104;49;50;51;52; ++ ++[ipv4] ++method=auto ++ +diff --git a/src/settings/plugins/keyfile/tests/test-keyfile.c b/src/settings/plugins/keyfile/tests/test-keyfile.c +index 6cdd198..3bbaaae 100644 +--- a/src/settings/plugins/keyfile/tests/test-keyfile.c ++++ b/src/settings/plugins/keyfile/tests/test-keyfile.c +@@ -1438,6 +1438,131 @@ test_write_string_ssid (void) + g_object_unref (connection); + } + ++#define TEST_INTLIST_SSID_FILE TEST_KEYFILES_DIR"/Test_Intlist_SSID" ++ ++static void ++test_read_intlist_ssid (void) ++{ ++ NMConnection *connection; ++ NMSettingWireless *s_wifi; ++ GError *error = NULL; ++ gboolean success; ++ const GByteArray *array; ++ const char *expected_ssid = "blah1234"; ++ ++ connection = nm_keyfile_plugin_connection_from_file (TEST_INTLIST_SSID_FILE, &error); ++ g_assert_no_error (error); ++ g_assert (connection); ++ ++ success = nm_connection_verify (connection, &error); ++ g_assert_no_error (error); ++ g_assert (success); ++ ++ /* SSID */ ++ s_wifi = nm_connection_get_setting_wireless (connection); ++ g_assert (s_wifi); ++ ++ array = nm_setting_wireless_get_ssid (s_wifi); ++ g_assert (array != NULL); ++ g_assert_cmpint (array->len, ==, strlen (expected_ssid)); ++ g_assert_cmpint (memcmp (array->data, expected_ssid, strlen (expected_ssid)), ==, 0); ++ ++ g_object_unref (connection); ++} ++ ++static void ++test_write_intlist_ssid (void) ++{ ++ NMConnection *connection; ++ NMSettingConnection *s_con; ++ NMSettingWireless *s_wifi; ++ NMSettingIP4Config *s_ip4; ++ char *uuid, *testfile = NULL; ++ GByteArray *ssid; ++ unsigned char tmpssid[] = { 65, 49, 50, 51, 0, 50, 50 }; ++ gboolean success; ++ NMConnection *reread; ++ GError *error = NULL; ++ pid_t owner_grp; ++ uid_t owner_uid; ++ GKeyFile *keyfile; ++ gint *intlist; ++ gsize len = 0, i; ++ ++ connection = nm_connection_new (); ++ g_assert (connection); ++ ++ /* Connection setting */ ++ ++ s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ()); ++ g_assert (s_con); ++ nm_connection_add_setting (connection, NM_SETTING (s_con)); ++ ++ uuid = nm_utils_uuid_generate (); ++ g_object_set (s_con, ++ NM_SETTING_CONNECTION_ID, "Intlist SSID Test", ++ NM_SETTING_CONNECTION_UUID, uuid, ++ NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRELESS_SETTING_NAME, ++ NULL); ++ g_free (uuid); ++ ++ /* Wireless setting */ ++ s_wifi = NM_SETTING_WIRELESS (nm_setting_wireless_new ()); ++ g_assert (s_wifi); ++ nm_connection_add_setting (connection, NM_SETTING (s_wifi)); ++ ++ ssid = g_byte_array_sized_new (sizeof (tmpssid)); ++ g_byte_array_append (ssid, &tmpssid[0], sizeof (tmpssid)); ++ g_object_set (s_wifi, NM_SETTING_WIRELESS_SSID, ssid, NULL); ++ g_byte_array_free (ssid, TRUE); ++ ++ /* IP4 setting */ ++ s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ()); ++ g_assert (s_ip4); ++ nm_connection_add_setting (connection, NM_SETTING (s_ip4)); ++ g_object_set (s_ip4, NM_SETTING_IP4_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL); ++ ++ /* Write out the connection */ ++ owner_uid = geteuid (); ++ owner_grp = getegid (); ++ success = nm_keyfile_plugin_write_test_connection (connection, TEST_SCRATCH_DIR, owner_uid, owner_grp, &testfile, &error); ++ g_assert_no_error (error); ++ g_assert (success); ++ g_assert (testfile != NULL); ++ ++ /* Ensure the SSID was written out as an int list */ ++ keyfile = g_key_file_new (); ++ success = g_key_file_load_from_file (keyfile, testfile, 0, &error); ++ g_assert_no_error (error); ++ g_assert (success); ++ ++ intlist = g_key_file_get_integer_list (keyfile, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID, &len, &error); ++ g_assert_no_error (error); ++ g_assert (intlist); ++ g_assert_cmpint (len, ==, sizeof (tmpssid)); ++ ++ for (i = 0; i < len; i++) ++ g_assert_cmpint (intlist[i], ==, tmpssid[i]); ++ g_free (intlist); ++ ++ g_key_file_free (keyfile); ++ ++ /* Read the connection back in and compare it to the one we just wrote out */ ++ reread = nm_keyfile_plugin_connection_from_file (testfile, &error); ++ g_assert_no_error (error); ++ g_assert (reread); ++ ++ success = nm_connection_compare (connection, reread, NM_SETTING_COMPARE_FLAG_EXACT); ++ g_assert (success); ++ ++ g_clear_error (&error); ++ unlink (testfile); ++ g_free (testfile); ++ ++ g_object_unref (reread); ++ g_object_unref (connection); ++} ++ + #define TEST_BT_DUN_FILE TEST_KEYFILES_DIR"/ATT_Data_Connect_BT" + + static void +@@ -2488,6 +2613,9 @@ int main (int argc, char **argv) + test_read_string_ssid (); + test_write_string_ssid (); + ++ test_read_intlist_ssid (); ++ test_write_intlist_ssid (); ++ + test_read_bt_dun_connection (); + test_write_bt_dun_connection (); + +-- +1.7.6 + diff --git a/net-misc/networkmanager/files/0.8.9997/0009-libnm-util-default-to-allowing-IPv6-connections-to-f.patch b/net-misc/networkmanager/files/0.8.9997/0009-libnm-util-default-to-allowing-IPv6-connections-to-f.patch new file mode 100644 index 0000000000..4a3c6fcc8d --- /dev/null +++ b/net-misc/networkmanager/files/0.8.9997/0009-libnm-util-default-to-allowing-IPv6-connections-to-f.patch @@ -0,0 +1,32 @@ +From 36db194ae95e35cc7b8f431ab984780dea24656d Mon Sep 17 00:00:00 2001 +From: Mathieu Trudel-Lapierre <mathieu.tl@gmail.com> +Date: Wed, 20 Jul 2011 23:56:48 -0500 +Subject: [PATCH 2/2] libnm-util: default to allowing IPv6 connections to fail + +Allow IPv6 connections to fail by changing the default value of the may-fail +property for ipv6 settings to TRUE. + +This makes sure connections created manually using nm-connection-editor +will default to having the "Require ..." checkbox unchecked; in other words, +IPv6 timing out will still allow the interface to be configured if +IPv4 succeeds. +--- + libnm-util/nm-setting-ip6-config.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/libnm-util/nm-setting-ip6-config.c b/libnm-util/nm-setting-ip6-config.c +index e911639..4dc8f46 100644 +--- a/libnm-util/nm-setting-ip6-config.c ++++ b/libnm-util/nm-setting-ip6-config.c +@@ -1056,7 +1056,7 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class) + "this property to TRUE allows the overall network " + "configuration to succeed if IPv6 configuration " + "fails but IPv4 configuration completes successfully.", +- FALSE, ++ TRUE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT | NM_SETTING_PARAM_SERIALIZE)); + } + +-- +1.7.6 + diff --git a/net-misc/networkmanager/files/networkmanager-fix-tests.patch b/net-misc/networkmanager/files/networkmanager-fix-tests.patch new file mode 100644 index 0000000000..7bd8a2bc0a --- /dev/null +++ b/net-misc/networkmanager/files/networkmanager-fix-tests.patch @@ -0,0 +1,18 @@ +--- configure.ac ++++ configure.ac +@@ -577,7 +577,6 @@ + src/settings/plugins/ifupdown/Makefile + src/settings/plugins/ifupdown/tests/Makefile + src/settings/plugins/ifnet/Makefile +-src/settings/plugins/ifnet/tests/Makefile + src/settings/plugins/ifcfg-rh/Makefile + src/settings/plugins/ifcfg-rh/tests/Makefile + src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile +--- src/settings/plugins/ifnet/Makefile.am ++++ src/settings/plugins/ifnet/Makefile.am +@@ -1,4 +1,4 @@ +-SUBDIRS = . tests ++SUBDIRS = . + INCLUDES = \ + -I$(top_srcdir)/src/settings \ + -I$(top_srcdir)/include \ diff --git a/net-misc/networkmanager/files/nm-system-settings.conf-ifnet b/net-misc/networkmanager/files/nm-system-settings.conf-ifnet new file mode 100644 index 0000000000..4d14ee7b80 --- /dev/null +++ b/net-misc/networkmanager/files/nm-system-settings.conf-ifnet @@ -0,0 +1,6 @@ +[main] +plugins=ifnet,keyfile + +[ifnet] +managed=true +auto_refresh=false diff --git a/net-misc/networkmanager/metadata.xml b/net-misc/networkmanager/metadata.xml index 7d8b3b476c..7d32afff1f 100644 --- a/net-misc/networkmanager/metadata.xml +++ b/net-misc/networkmanager/metadata.xml @@ -10,18 +10,17 @@ <email>rbu@gentoo.org</email> <name>Robert Buchholz</name> </maintainer> - <maintainer> - <email>dagger@gentoo.org</email> - <name>Robert Piasek</name> - </maintainer> + <maintainer> + <email>dagger@gentoo.org</email> + <name>Robert Piasek</name> + </maintainer> <use> - <flag name="connection-sharing">Use <pkg>net-dns/dnsmasq</pkg> and <pkg>net-firewall/iptables</pkg> for connection sharing </flag> - <flag name="dhclient">Use dhclient from <pkg>net-misc/dhcp</pkg> for getting ip.</flag> + <flag name="ppp">Enable support for mobile broadband and PPPoE connections using <pkg>net-dialup/ppp</pkg>.</flag> + <flag name="dhclient">Use dhclient from <pkg>net-misc/dhcp</pkg> for getting ip.</flag> <flag name="dhcpcd">Use <pkg>net-misc/dhcpcd</pkg> for getting ip.</flag> - <flag name="introspection">Use <pkg>dev-libs/gobject-introspection</pkg> for introspection</flag> <flag name="nss">Use <pkg>dev-libs/nss</pkg> for cryptography.</flag> - <flag name="ppp">Enable support for mobile broadband and PPPoE connections using <pkg>net-dialup/ppp</pkg>.</flag> <flag name="resolvconf">Use <pkg>net-dns/openresolv</pkg> for managing DNS information</flag> + <flag name="connection-sharing">Use <pkg>net-dns/dnsmasq</pkg> and <pkg>net-firewall/iptables</pkg> for connection sharing </flag> <flag name="wimax">Enable WiMAX support. Requires <pkg>net-wireless/wimax</pkg>.</flag> </use> </pkgmetadata> diff --git a/net-misc/networkmanager/networkmanager-0.8.9997.ebuild b/net-misc/networkmanager/networkmanager-0.8.9997-r1.ebuild index 12617d739a..0a1b561109 100644 --- a/net-misc/networkmanager/networkmanager-0.8.9997.ebuild +++ b/net-misc/networkmanager/networkmanager-0.8.9997-r1.ebuild @@ -1,44 +1,34 @@ # Copyright 1999-2011 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: $ +# $Header: /var/cvsroot/gentoo-x86/net-misc/networkmanager/networkmanager-0.8.995.ebuild,v 1.1 2011/03/09 07:56:21 qiaomuf Exp $ EAPI="4" +GNOME_ORG_MODULE="NetworkManager" -# NetworkManager likes itself with capital letters -MY_PN=${PN/networkmanager/NetworkManager} -MY_P=${MY_PN}-${PV} - -if [[ ${PV} == *9999 ]]; then - git_eclass="git-2" - EGIT_REPO_URI="git://anongit.freedesktop.org/${MY_PN}/${MY_PN}" - KEYWORDS="" -else - SRC_URI="http://cgit.freedesktop.org/${MY_PN}/${MY_PN}/snapshot/${MY_P}.tar.bz2" - KEYWORDS="~amd64 ~arm ~x86" -fi - -inherit autotools eutils linux-info ${git_eclass} +inherit autotools eutils gnome.org linux-info systemd DESCRIPTION="Network configuration and management in an easy way. Desktop environment independent." HOMEPAGE="http://www.gnome.org/projects/NetworkManager/" -SRC_URI="${SRC_URI} - http://dev.gentoo.org/~dagger/files/ifnet-0.9.tar.bz2 - " LICENSE="GPL-2" SLOT="0" -IUSE="avahi bluetooth doc +nss gnutls dhclient +dhcpcd +introspection kernel_linux +ppp resolvconf connection-sharing wimax" +IUSE="avahi bluetooth doc +nss gnutls dhclient +dhcpcd +introspection +kernel_linux +ppp resolvconf connection-sharing wimax" +KEYWORDS="~amd64 ~arm ~ppc ~ppc64 ~x86" REQUIRED_USE=" - nss? ( !gnutls ) !nss? ( gnutls ) - dhcpcd? ( !dhclient ) !dhcpcd? ( dhclient )" + ^^ ( nss gnutls ) + ^^ ( dhclient dhcpcd )" -RDEPEND=">=sys-apps/dbus-1.2 +# gobject-introspection-0.10.3 is needed due to gnome bug 642300 +# wpa_supplicant-0.7.3-r3 is needed due to bug 359271 +# make consolekit and/or polkit support optional ? +COMMON_DEPEND=">=sys-apps/dbus-1.2 >=dev-libs/dbus-glib-0.75 >=net-wireless/wireless-tools-28_pre9 - >=sys-fs/udev-147[extras] + || ( >=sys-fs/udev-171[gudev] >=sys-fs/udev-147[extras] ) >=dev-libs/glib-2.26 - >=sys-auth/polkit-0.96 + >=sys-auth/polkit-0.97 >=dev-libs/libnl-1.1 >=net-misc/modemmanager-0.4 >=net-wireless/wpa_supplicant-0.7.3-r3[dbus] @@ -58,14 +48,15 @@ RDEPEND=">=sys-apps/dbus-1.2 net-firewall/iptables ) wimax? ( >=net-wireless/wimax-1.5.1 )" -DEPEND="${RDEPEND} +RDEPEND="${COMMON_DEPEND} + sys-auth/consolekit" + +DEPEND="${COMMON_DEPEND} dev-util/pkgconfig - dev-util/intltool - >=dev-util/gtk-doc-1.15 + >=dev-util/intltool-0.40 + >=sys-devel/gettext-0.17 doc? ( >=dev-util/gtk-doc-1.8 )" -S=${WORKDIR}/${MY_P} - sysfs_deprecated_check() { ebegin "Checking for SYSFS_DEPRECATED support" @@ -78,7 +69,7 @@ sysfs_deprecated_check() { eend $? } -pkg_setup() { +pkg_pretend() { if use kernel_linux; then get_version if linux_config_exists; then @@ -93,10 +84,14 @@ pkg_setup() { } src_prepare() { - gtkdocize - eautopoint --force - intltoolize --force --automake --copy - eautoreconf + # Add useful patches from upstream git (fixing crashes, SSID parsing bugs, + # and significant usability problems). + epatch "${FILESDIR}/${PV}/"*.patch + + # Don't build tests + epatch "${FILESDIR}/${PN}-fix-tests.patch" + eautoreconf + default } src_configure() { @@ -104,7 +99,7 @@ src_configure() { --localstatedir=/var --with-distro=gentoo --with-dbus-sys-dir=/etc/dbus-1/system.d - --with-udev-dir=/etc/udev + --with-udev-dir=/lib/udev --with-iptables=/sbin/iptables $(use_enable doc gtk-doc) $(use_enable introspection) @@ -113,7 +108,8 @@ src_configure() { $(use_with dhclient) $(use_with dhcpcd) $(use_with doc docs) - $(use_with resolvconf)" + $(use_with resolvconf) + $(systemd_with_unitdir)" if use nss ; then ECONF="${ECONF} $(use_with nss crypto=nss)" @@ -132,17 +128,11 @@ src_install() { # Need to keep the /etc/NetworkManager/dispatched.d for dispatcher scripts keepdir /etc/NetworkManager/dispatcher.d - dodoc AUTHORS ChangeLog NEWS README TODO || die "dodoc failed" - # Add keyfile plugin support keepdir /etc/NetworkManager/system-connections insinto /etc/NetworkManager - newins "${FILESDIR}/nm-system-settings.conf" nm-system-settings.conf \ - || die "newins failed" -} + newins "${FILESDIR}/nm-system-settings.conf-ifnet" nm-system-settings.conf -pkg_postinst() { - elog "You will need to reload DBus if this is your first time installing" - elog "NetworkManager, or if you're upgrading from 0.7 or older." - elog "" + # Remove useless .la files + find "${D}" -name '*.la' -exec rm -f {} + } diff --git a/net-misc/networkmanager/networkmanager-9999.ebuild b/net-misc/networkmanager/networkmanager-9999.ebuild deleted file mode 100644 index 12617d739a..0000000000 --- a/net-misc/networkmanager/networkmanager-9999.ebuild +++ /dev/null @@ -1,148 +0,0 @@ -# Copyright 1999-2011 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -EAPI="4" - -# NetworkManager likes itself with capital letters -MY_PN=${PN/networkmanager/NetworkManager} -MY_P=${MY_PN}-${PV} - -if [[ ${PV} == *9999 ]]; then - git_eclass="git-2" - EGIT_REPO_URI="git://anongit.freedesktop.org/${MY_PN}/${MY_PN}" - KEYWORDS="" -else - SRC_URI="http://cgit.freedesktop.org/${MY_PN}/${MY_PN}/snapshot/${MY_P}.tar.bz2" - KEYWORDS="~amd64 ~arm ~x86" -fi - -inherit autotools eutils linux-info ${git_eclass} - -DESCRIPTION="Network configuration and management in an easy way. Desktop environment independent." -HOMEPAGE="http://www.gnome.org/projects/NetworkManager/" -SRC_URI="${SRC_URI} - http://dev.gentoo.org/~dagger/files/ifnet-0.9.tar.bz2 - " - -LICENSE="GPL-2" -SLOT="0" -IUSE="avahi bluetooth doc +nss gnutls dhclient +dhcpcd +introspection kernel_linux +ppp resolvconf connection-sharing wimax" - -REQUIRED_USE=" - nss? ( !gnutls ) !nss? ( gnutls ) - dhcpcd? ( !dhclient ) !dhcpcd? ( dhclient )" - -RDEPEND=">=sys-apps/dbus-1.2 - >=dev-libs/dbus-glib-0.75 - >=net-wireless/wireless-tools-28_pre9 - >=sys-fs/udev-147[extras] - >=dev-libs/glib-2.26 - >=sys-auth/polkit-0.96 - >=dev-libs/libnl-1.1 - >=net-misc/modemmanager-0.4 - >=net-wireless/wpa_supplicant-0.7.3-r3[dbus] - bluetooth? ( >=net-wireless/bluez-4.82 ) - avahi? ( net-dns/avahi[autoipd] ) - gnutls? ( - dev-libs/libgcrypt - net-libs/gnutls ) - nss? ( >=dev-libs/nss-3.11 ) - dhclient? ( net-misc/dhcp ) - dhcpcd? ( >=net-misc/dhcpcd-4.0.0_rc3 ) - introspection? ( >=dev-libs/gobject-introspection-0.10.3 ) - ppp? ( >=net-dialup/ppp-2.4.5 ) - resolvconf? ( net-dns/openresolv ) - connection-sharing? ( - net-dns/dnsmasq - net-firewall/iptables ) - wimax? ( >=net-wireless/wimax-1.5.1 )" - -DEPEND="${RDEPEND} - dev-util/pkgconfig - dev-util/intltool - >=dev-util/gtk-doc-1.15 - doc? ( >=dev-util/gtk-doc-1.8 )" - -S=${WORKDIR}/${MY_P} - -sysfs_deprecated_check() { - ebegin "Checking for SYSFS_DEPRECATED support" - - if { linux_chkconfig_present SYSFS_DEPRECATED_V2; }; then - eerror "Please disable SYSFS_DEPRECATED_V2 support in your kernel config and recompile your kernel" - eerror "or NetworkManager will not work correctly." - eerror "See http://bugs.gentoo.org/333639 for more info." - die "CONFIG_SYSFS_DEPRECATED_V2 support detected!" - fi - eend $? -} - -pkg_setup() { - if use kernel_linux; then - get_version - if linux_config_exists; then - sysfs_deprecated_check - else - ewarn "Was unable to determine your kernel .config" - ewarn "Please note that if CONFIG_SYSFS_DEPRECATED_V2 is set in your kernel .config, NetworkManager will not work correctly." - ewarn "See http://bugs.gentoo.org/333639 for more info." - fi - - fi -} - -src_prepare() { - gtkdocize - eautopoint --force - intltoolize --force --automake --copy - eautoreconf -} - -src_configure() { - ECONF="--disable-more-warnings - --localstatedir=/var - --with-distro=gentoo - --with-dbus-sys-dir=/etc/dbus-1/system.d - --with-udev-dir=/etc/udev - --with-iptables=/sbin/iptables - $(use_enable doc gtk-doc) - $(use_enable introspection) - $(use_enable ppp) - $(use_enable wimax) - $(use_with dhclient) - $(use_with dhcpcd) - $(use_with doc docs) - $(use_with resolvconf)" - - if use nss ; then - ECONF="${ECONF} $(use_with nss crypto=nss)" - else - ECONF="${ECONF} $(use_with gnutls crypto=gnutls)" - fi - - econf ${ECONF} -} - -src_install() { - default - # Need to keep the /var/run/NetworkManager directory - keepdir /var/run/NetworkManager - - # Need to keep the /etc/NetworkManager/dispatched.d for dispatcher scripts - keepdir /etc/NetworkManager/dispatcher.d - - dodoc AUTHORS ChangeLog NEWS README TODO || die "dodoc failed" - - # Add keyfile plugin support - keepdir /etc/NetworkManager/system-connections - insinto /etc/NetworkManager - newins "${FILESDIR}/nm-system-settings.conf" nm-system-settings.conf \ - || die "newins failed" -} - -pkg_postinst() { - elog "You will need to reload DBus if this is your first time installing" - elog "NetworkManager, or if you're upgrading from 0.7 or older." - elog "" -} |