mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-06 12:00:17 +01:00
Merge tui fixes for IPv6 routes and MAC address (bgo #731160)
- fixes crash when editing IPv6 routes - fixes editing of Cloned MAC address
This commit is contained in:
commit
7a79a78a1b
3 changed files with 30 additions and 11 deletions
|
|
@ -772,7 +772,7 @@ ip6_addresses_to_strv (GBinding *binding,
|
|||
for (i = 0; i < addrs->len; i++) {
|
||||
addrbytes = addrs->pdata[i];
|
||||
if (IP6_ADDRESS_SET (addrbytes))
|
||||
inet_ntop (AF_INET, addrbytes->data, buf, sizeof (buf));
|
||||
inet_ntop (AF_INET6, addrbytes->data, buf, sizeof (buf));
|
||||
else
|
||||
buf[0] = '\0';
|
||||
strings[i] = g_strdup (buf);
|
||||
|
|
@ -1002,7 +1002,7 @@ ip6_route_transform_to_next_hop_string (GBinding *binding,
|
|||
addrbytes = &in6addr_any;
|
||||
|
||||
if (IN6_ADDR_SET (addrbytes))
|
||||
inet_ntop (AF_INET, &addrbytes, buf, sizeof (buf));
|
||||
inet_ntop (AF_INET6, addrbytes, buf, sizeof (buf));
|
||||
else
|
||||
buf[0] = '\0';
|
||||
g_value_set_string (target_value, buf);
|
||||
|
|
@ -1035,7 +1035,7 @@ ip6_route_transform_from_dest_string (GBinding *binding,
|
|||
{
|
||||
NMIP6Route *route;
|
||||
const char *text;
|
||||
const struct in6_addr *addrbytes;
|
||||
struct in6_addr addrbytes;
|
||||
guint32 prefix;
|
||||
|
||||
text = g_value_get_string (source_value);
|
||||
|
|
@ -1047,7 +1047,7 @@ ip6_route_transform_from_dest_string (GBinding *binding,
|
|||
g_binding_get_source_property (binding), &route,
|
||||
NULL);
|
||||
|
||||
nm_ip6_route_set_dest (route, addrbytes);
|
||||
nm_ip6_route_set_dest (route, &addrbytes);
|
||||
nm_ip6_route_set_prefix (route, prefix);
|
||||
|
||||
g_value_take_boxed (target_value, route);
|
||||
|
|
@ -1062,21 +1062,21 @@ ip6_route_transform_from_next_hop_string (GBinding *binding,
|
|||
{
|
||||
NMIP6Route *route;
|
||||
const char *text;
|
||||
const struct in6_addr *addrbytes;
|
||||
struct in6_addr addrbytes;
|
||||
|
||||
text = g_value_get_string (source_value);
|
||||
if (*text) {
|
||||
if (!ip_string_parse (text, AF_INET6, &addrbytes, NULL))
|
||||
return FALSE;
|
||||
} else
|
||||
addrbytes = 0;
|
||||
addrbytes = in6addr_any;
|
||||
|
||||
/* Fetch the original property value */
|
||||
g_object_get (g_binding_get_source (binding),
|
||||
g_binding_get_source_property (binding), &route,
|
||||
NULL);
|
||||
|
||||
nm_ip6_route_set_next_hop (route, addrbytes);
|
||||
nm_ip6_route_set_next_hop (route, &addrbytes);
|
||||
|
||||
g_value_take_boxed (target_value, route);
|
||||
return TRUE;
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@
|
|||
|
||||
#include "config.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <dbus/dbus-glib.h>
|
||||
#include <nm-utils.h>
|
||||
|
||||
|
|
@ -80,7 +82,7 @@ mac_filter (NmtNewtEntry *entry,
|
|||
{
|
||||
NmtMacEntryPrivate *priv = NMT_MAC_ENTRY_GET_PRIVATE (entry);
|
||||
|
||||
if (position > priv->mac_str_length)
|
||||
if (position >= priv->mac_str_length)
|
||||
return FALSE;
|
||||
|
||||
return g_ascii_isxdigit (ch) || ch == ':';
|
||||
|
|
@ -114,8 +116,13 @@ mac_validator (NmtNewtEntry *entry,
|
|||
if (g_ascii_isxdigit (p[0]) && !p[1]) {
|
||||
char *fixed = g_strdup_printf ("%.*s:%c", (int)(p - text), text, *p);
|
||||
|
||||
g_object_set (G_OBJECT (entry), "text", fixed, NULL);
|
||||
return TRUE;
|
||||
nmt_newt_entry_set_text (entry, fixed);
|
||||
g_free (fixed);
|
||||
|
||||
/* FIXME: NmtNewtEntry doesn't correctly deal with us calling set_text()
|
||||
* from inside the validator.
|
||||
*/
|
||||
nmt_newt_widget_needs_rebuild (NMT_NEWT_WIDGET (entry));
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
|
@ -128,6 +135,17 @@ nmt_mac_entry_init (NmtMacEntry *entry)
|
|||
nmt_newt_entry_set_validator (NMT_NEWT_ENTRY (entry), mac_validator, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
nmt_mac_entry_notify (GObject *object,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
if (G_OBJECT_CLASS (nmt_mac_entry_parent_class)->notify)
|
||||
G_OBJECT_CLASS (nmt_mac_entry_parent_class)->notify (object, pspec);
|
||||
|
||||
if (pspec->owner_type == NMT_TYPE_NEWT_ENTRY && !strcmp (pspec->name, "text"))
|
||||
g_object_notify (object, "mac-address");
|
||||
}
|
||||
|
||||
static void
|
||||
nmt_mac_entry_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
|
|
@ -189,6 +207,7 @@ nmt_mac_entry_class_init (NmtMacEntryClass *entry_class)
|
|||
g_type_class_add_private (entry_class, sizeof (NmtMacEntryPrivate));
|
||||
|
||||
/* virtual methods */
|
||||
object_class->notify = nmt_mac_entry_notify;
|
||||
object_class->set_property = nmt_mac_entry_set_property;
|
||||
object_class->get_property = nmt_mac_entry_get_property;
|
||||
|
||||
|
|
|
|||
|
|
@ -206,7 +206,7 @@ nmt_route_entry_set_property (GObject *object,
|
|||
priv->ip4_route = g_value_dup_boxed (value);
|
||||
break;
|
||||
case PROP_IP6_ROUTE:
|
||||
g_return_if_fail (priv->family == AF_INET);
|
||||
g_return_if_fail (priv->family == AF_INET6);
|
||||
if (priv->ip6_route)
|
||||
nm_ip6_route_unref (priv->ip6_route);
|
||||
priv->ip6_route = g_value_dup_boxed (value);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue