mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-06-18 22:28:29 +02:00
cli: fix a crash when trying to set a white-space string as IP (rh #1071394)
nmcli con modify my-profile ipv4.addr " " nmcli con modify my-profile ipv6.addr " " Note: Empty string should be used to remove IPs, and 'method' might be needed to set to 'auto' simultaneously, as well. $ nmcli con modify profile1 ipv4.addr "" ipv4.method auto https://bugzilla.redhat.com/show_bug.cgi?id=1071394
This commit is contained in:
parent
d98a34dcda
commit
296d7f6ec7
1 changed files with 22 additions and 18 deletions
|
|
@ -3047,17 +3047,20 @@ DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_ipv4_remove_dns_search,
|
|||
static NMIP4Address *
|
||||
_parse_ipv4_address (const char *address, GError **error)
|
||||
{
|
||||
char *value = g_strdup (address);
|
||||
char **addrv;
|
||||
NMIP4Address *ip4addr;
|
||||
|
||||
addrv = nmc_strsplit_set (address, " \t", 0);
|
||||
if (g_strv_length (addrv) > 2) {
|
||||
addrv = nmc_strsplit_set (g_strstrip (value), " \t", 0);
|
||||
if (addrv[0] == NULL || g_strv_length (addrv) > 2) {
|
||||
g_set_error (error, 1, 0, _("'%s' is not valid (use ip[/prefix] [gateway])"),
|
||||
address);
|
||||
g_free (value);
|
||||
g_strfreev (addrv);
|
||||
return NULL;
|
||||
}
|
||||
ip4addr = nmc_parse_and_build_ip4_address (addrv[0], addrv[1], error);
|
||||
g_free (value);
|
||||
g_strfreev (addrv);
|
||||
return ip4addr;
|
||||
}
|
||||
|
|
@ -3072,9 +3075,7 @@ nmc_property_ipv4_set_addresses (NMSetting *setting, const char *prop, const cha
|
|||
|
||||
strv = nmc_strsplit_set (val, ",", 0);
|
||||
for (iter = strv; iter && *iter; iter++) {
|
||||
char *address = g_strstrip (*iter);
|
||||
|
||||
ip4addr = _parse_ipv4_address (address, error);
|
||||
ip4addr = _parse_ipv4_address (*iter, error);
|
||||
if (!ip4addr) {
|
||||
g_strfreev (strv);
|
||||
return FALSE;
|
||||
|
|
@ -3159,17 +3160,20 @@ nmc_property_out2in_addresses (const char *out_format)
|
|||
static NMIP4Route *
|
||||
_parse_ipv4_route (const char *route, GError **error)
|
||||
{
|
||||
char *value = g_strdup (route);
|
||||
char **routev;
|
||||
NMIP4Route *ip4route;
|
||||
|
||||
routev = nmc_strsplit_set (route, " \t", 0);
|
||||
routev = nmc_strsplit_set (g_strstrip (value), " \t", 0);
|
||||
if (g_strv_length (routev) < 2 || g_strv_length (routev) > 3) {
|
||||
g_set_error (error, 1, 0, _("'%s' is not valid (use ip/[prefix] next-hop [metric])"),
|
||||
route);
|
||||
g_free (value);
|
||||
g_strfreev (routev);
|
||||
return NULL;
|
||||
}
|
||||
ip4route = nmc_parse_and_build_ip4_route (routev[0], routev[1], routev[2], error);
|
||||
g_free (value);
|
||||
g_strfreev (routev);
|
||||
return ip4route;
|
||||
}
|
||||
|
|
@ -3184,9 +3188,7 @@ nmc_property_ipv4_set_routes (NMSetting *setting, const char *prop, const char *
|
|||
|
||||
strv = nmc_strsplit_set (val, ",", 0);
|
||||
for (iter = strv; iter && *iter; iter++) {
|
||||
char *route = g_strstrip (*iter);
|
||||
|
||||
ip4route = _parse_ipv4_route (route, error);
|
||||
ip4route = _parse_ipv4_route (*iter, error);
|
||||
if (!ip4route) {
|
||||
g_strfreev (strv);
|
||||
return FALSE;
|
||||
|
|
@ -3392,17 +3394,20 @@ DEFINE_REMOVER_INDEX_OR_VALUE (nmc_property_ipv6_remove_dns_search,
|
|||
static NMIP6Address *
|
||||
_parse_ipv6_address (const char *address, GError **error)
|
||||
{
|
||||
char *value = g_strstrip (g_strdup (address));
|
||||
char **addrv;
|
||||
NMIP6Address *ip6addr;
|
||||
|
||||
addrv = nmc_strsplit_set (address, " \t", 0);
|
||||
if (g_strv_length (addrv) > 2) {
|
||||
addrv = nmc_strsplit_set (g_strstrip (value), " \t", 0);
|
||||
if (addrv[0] == NULL || g_strv_length (addrv) > 2) {
|
||||
g_set_error (error, 1, 0, _("'%s' is not valid (use ip[/prefix] [gateway])"),
|
||||
address);
|
||||
g_free (value);
|
||||
g_strfreev (addrv);
|
||||
return NULL;
|
||||
}
|
||||
ip6addr = nmc_parse_and_build_ip6_address (addrv[0], addrv[1], error);
|
||||
g_free (value);
|
||||
g_strfreev (addrv);
|
||||
return ip6addr;
|
||||
}
|
||||
|
|
@ -3417,9 +3422,7 @@ nmc_property_ipv6_set_addresses (NMSetting *setting, const char *prop, const cha
|
|||
|
||||
strv = nmc_strsplit_set (val, ",", 0);
|
||||
for (iter = strv; iter && *iter; iter++) {
|
||||
char *address = g_strstrip (*iter);
|
||||
|
||||
ip6addr = _parse_ipv6_address (address, error);
|
||||
ip6addr = _parse_ipv6_address (*iter, error);
|
||||
if (!ip6addr) {
|
||||
g_strfreev (strv);
|
||||
return FALSE;
|
||||
|
|
@ -3468,17 +3471,20 @@ nmc_property_ipv6_describe_addresses (NMSetting *setting, const char *prop)
|
|||
static NMIP6Route *
|
||||
_parse_ipv6_route (const char *route, GError **error)
|
||||
{
|
||||
char *value = g_strdup (route);
|
||||
char **routev;
|
||||
NMIP6Route *ip6route;
|
||||
|
||||
routev = nmc_strsplit_set (route, " \t", 0);
|
||||
routev = nmc_strsplit_set (g_strstrip (value), " \t", 0);
|
||||
if (g_strv_length (routev) < 2 || g_strv_length (routev) > 3) {
|
||||
g_set_error (error, 1, 0, _("'%s' is not valid (use <dest IP>/prefix <next-hop IP> [metric])"),
|
||||
route);
|
||||
g_free (value);
|
||||
g_strfreev (routev);
|
||||
return NULL;
|
||||
}
|
||||
ip6route = nmc_parse_and_build_ip6_route (routev[0], routev[1], routev[2], error);
|
||||
g_free (value);
|
||||
g_strfreev (routev);
|
||||
return ip6route;
|
||||
}
|
||||
|
|
@ -3493,9 +3499,7 @@ nmc_property_ipv6_set_routes (NMSetting *setting, const char *prop, const char *
|
|||
|
||||
strv = nmc_strsplit_set (val, ",", 0);
|
||||
for (iter = strv; iter && *iter; iter++) {
|
||||
char *route = g_strstrip (*iter);
|
||||
|
||||
ip6route = _parse_ipv6_route (route, error);
|
||||
ip6route = _parse_ipv6_route (*iter, error);
|
||||
if (!ip6route) {
|
||||
g_strfreev (strv);
|
||||
return FALSE;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue