diff --git a/NetworkManager.spec b/NetworkManager.spec index 892c8fd..1539cf0 100644 --- a/NetworkManager.spec +++ b/NetworkManager.spec @@ -16,7 +16,7 @@ Name: NetworkManager Summary: Network connection manager and user applications Epoch: 1 Version: 0.7.0 -Release: 0.11.%{snapshot}.3%{?dist} +Release: 0.11.%{snapshot}.4%{?dist} Group: System Environment/Base License: GPLv2+ URL: http://www.gnome.org/projects/NetworkManager/ @@ -29,6 +29,7 @@ Patch5: explain-dns1-dns2.patch Patch6: wpa-adhoc-fix.patch Patch7: crypto-init.patch Patch8: nm-vpn-fixes-r900-r901.patch +Patch9: nm-param-spec-compare.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) PreReq: chkconfig @@ -152,6 +153,7 @@ tar -xzf %{SOURCE1} %patch6 -p1 -b .wpa-adhoc-fix %patch7 -p1 -b .crypto-init %patch8 -p1 -b .vpn-fixes +%patch9 -p1 -b .paramspec-compare %build autoreconf -i @@ -306,6 +308,9 @@ fi %{_datadir}/gtk-doc/html/libnm-glib/ %changelog +* Wed Oct 1 2008 Dan Williams - 1:0.7.0-0.11.svn4022.4 +- Fix connection comparison that could cause changes to get overwritten (rh #464417) + * Tue Sep 30 2008 Dan Williams - 1:0.7.0-0.11.svn4022.3 - Fix handling of VPN settings on upgrade (rh #460730, bgo #553465) diff --git a/nm-param-spec-compare.patch b/nm-param-spec-compare.patch new file mode 100644 index 0000000..1ca02c4 --- /dev/null +++ b/nm-param-spec-compare.patch @@ -0,0 +1,87 @@ +2008-10-01 Dan Williams + + Fix setting value comparison issue that caused some settings to look the + same when they were really different (rh #464417) + + * libnm-util/nm-param-spec-specialized.c + - (type_is_fixed_size): return fundamental size of the fixed type too + - (nm_gvalues_compare_collection): use the fundamental fixed type size + in the comparison so that the _entire_ fixed type collection gets + compared rather than just the first 'len1' bytes + +diff -up NetworkManager-0.7.0/libnm-util/nm-param-spec-specialized.c.compare-fix NetworkManager-0.7.0/libnm-util/nm-param-spec-specialized.c +--- NetworkManager-0.7.0/libnm-util/nm-param-spec-specialized.c.compare-fix 2008-10-01 17:41:41.000000000 -0400 ++++ NetworkManager-0.7.0/libnm-util/nm-param-spec-specialized.c 2008-10-01 17:42:05.000000000 -0400 +@@ -39,20 +39,41 @@ struct _NMParamSpecSpecialized { + static gint nm_gvalues_compare (const GValue *value1, const GValue *value2); + + static gboolean +-type_is_fixed_size (GType type) ++type_is_fixed_size (GType type, gsize *tsize) + { + switch (type) { + case G_TYPE_CHAR: ++ if (tsize) *tsize = sizeof (char); ++ return TRUE; + case G_TYPE_UCHAR: ++ if (tsize) *tsize = sizeof (guchar); ++ return TRUE; + case G_TYPE_BOOLEAN: ++ if (tsize) *tsize = sizeof (gboolean); ++ return TRUE; + case G_TYPE_LONG: ++ if (tsize) *tsize = sizeof (glong); ++ return TRUE; + case G_TYPE_ULONG: ++ if (tsize) *tsize = sizeof (gulong); ++ return TRUE; + case G_TYPE_INT: ++ if (tsize) *tsize = sizeof (gint); ++ return TRUE; + case G_TYPE_UINT: ++ if (tsize) *tsize = sizeof (guint); ++ return TRUE; + case G_TYPE_INT64: ++ if (tsize) *tsize = sizeof (gint64); ++ return TRUE; + case G_TYPE_UINT64: ++ if (tsize) *tsize = sizeof (guint64); ++ return TRUE; + case G_TYPE_FLOAT: ++ if (tsize) *tsize = sizeof (gfloat); ++ return TRUE; + case G_TYPE_DOUBLE: ++ if (tsize) *tsize = sizeof (gdouble); + return TRUE; + default: + return FALSE; +@@ -232,8 +253,9 @@ nm_gvalues_compare_collection (const GVa + guint len1; + guint len2; + GType value_type = dbus_g_type_get_collection_specialization (G_VALUE_TYPE (value1)); ++ gsize element_size = 0; + +- if (type_is_fixed_size (value_type)) { ++ if (type_is_fixed_size (value_type, &element_size)) { + gpointer data1 = NULL; + gpointer data2 = NULL; + +@@ -243,7 +265,7 @@ nm_gvalues_compare_collection (const GVa + if (len1 != len2) + ret = len1 < len2 ? -1 : len1 > len2; + else +- ret = memcmp (data1, data2, len1); ++ ret = memcmp (data1, data2, len1 * element_size); + } else { + GSList *list1 = NULL; + GSList *list2 = NULL; +@@ -372,8 +394,7 @@ nm_gvalues_compare (const GValue *value1 + if (type1 != type2) + return type1 < type2 ? -1 : type1 > type2; + +- +- if (type_is_fixed_size (type1)) ++ if (type_is_fixed_size (type1, NULL)) + ret = nm_gvalues_compare_fixed (value1, value2); + else if (type1 == G_TYPE_STRING) + ret = nm_gvalues_compare_string (value1, value2);