From a3d2153b90f3f56f1548d01be674a0ab5e82e6b7 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 19 May 2017 16:18:55 +0200 Subject: [PATCH] ifcfg-rh: omit empty next hop for routes in legacy format Don't add "via (null)" if the next hop is missing. https://bugzilla.redhat.com/show_bug.cgi?id=1452648 (cherry picked from commit af8aac9b544cb64df3b77a413dfded23e976d1b0) (cherry picked from commit cb5ba08f00691b18d272bfb08e4929d00fa246bb) --- .../plugins/ifcfg-rh/nms-ifcfg-rh-writer.c | 77 ++++++++++------------ 1 file changed, 36 insertions(+), 41 deletions(-) diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c index d6f33c4..400e9bd 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c @@ -1926,12 +1926,8 @@ get_route_attributes_string (NMIPRoute *route, int family) static gboolean write_route_file_legacy (const char *filename, NMSettingIPConfig *s_ip4, GError **error) { - const char *dest, *next_hop; - char **route_items; - gs_free char *route_contents = NULL; + nm_auto_free_gstring GString *contents = NULL; NMIPRoute *route; - guint32 prefix; - gint64 metric; guint32 i, num; g_return_val_if_fail (filename != NULL, FALSE); @@ -1945,36 +1941,34 @@ write_route_file_legacy (const char *filename, NMSettingIPConfig *s_ip4, GError return TRUE; } - route_items = g_malloc0 (sizeof (char *) * (num + 1)); + contents = g_string_new (""); + for (i = 0; i < num; i++) { + const char *next_hop; gs_free char *options = NULL; + gint64 metric; route = nm_setting_ip_config_get_route (s_ip4, i); - - dest = nm_ip_route_get_dest (route); - prefix = nm_ip_route_get_prefix (route); next_hop = nm_ip_route_get_next_hop (route); metric = nm_ip_route_get_metric (route); - options = get_route_attributes_string (route, AF_INET); - if (metric == -1) { - route_items[i] = g_strdup_printf ("%s/%u via %s%s%s\n", - dest, prefix, next_hop, - options ? " " : "", - options ?: ""); - } else { - route_items[i] = g_strdup_printf ("%s/%u via %s metric %u%s%s\n", - dest, prefix, next_hop, (guint32) metric, - options ? " " : "", - options ?: ""); + g_string_append_printf (contents, "%s/%u", + nm_ip_route_get_dest (route), + nm_ip_route_get_prefix (route)); + if (next_hop) + g_string_append_printf (contents, " via %s", next_hop); + if (metric >= 0) + g_string_append_printf (contents, " metric %u", (guint) metric); + if (options) { + g_string_append_c (contents, ' '); + g_string_append (contents, options); } + + g_string_append_c (contents, '\n'); } - route_items[num] = NULL; - route_contents = g_strjoinv (NULL, route_items); - g_strfreev (route_items); - if (!g_file_set_contents (filename, route_contents, -1, NULL)) { + if (!g_file_set_contents (filename, contents->str, contents->len, NULL)) { g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED, "Writing route file '%s' failed", filename); return FALSE; @@ -2492,32 +2486,33 @@ write_route6_file (const char *filename, NMSettingIPConfig *s_ip6, GError **erro } contents = g_string_new (""); + for (i = 0; i < num; i++) { gs_free char *options = NULL; + const char *next_hop; + gint64 metric; route = nm_setting_ip_config_get_route (s_ip6, i); + next_hop = nm_ip_route_get_next_hop (route); + metric = nm_ip_route_get_metric (route); options = get_route_attributes_string (route, AF_INET6); - if (nm_ip_route_get_metric (route) == -1) { - g_string_append_printf (contents, "%s/%u via %s%s%s", - nm_ip_route_get_dest (route), - nm_ip_route_get_prefix (route), - nm_ip_route_get_next_hop (route), - options ? " " : "", - options ?: ""); - } else { - g_string_append_printf (contents, "%s/%u via %s metric %u%s%s", - nm_ip_route_get_dest (route), - nm_ip_route_get_prefix (route), - nm_ip_route_get_next_hop (route), - (unsigned) nm_ip_route_get_metric (route), - options ? " " : "", - options ?: ""); + g_string_append_printf (contents, "%s/%u", + nm_ip_route_get_dest (route), + nm_ip_route_get_prefix (route)); + if (next_hop) + g_string_append_printf (contents, " via %s", next_hop); + if (metric >= 0) + g_string_append_printf (contents, " metric %u", (guint) metric); + if (options) { + g_string_append_c (contents, ' '); + g_string_append (contents, options); } - g_string_append (contents, "\n"); + + g_string_append_c (contents, '\n'); } - if (!g_file_set_contents (filename, contents->str, -1, NULL)) { + if (!g_file_set_contents (filename, contents->str, contents->len, NULL)) { g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED, "Writing route6 file '%s' failed", filename); return FALSE; -- 2.9.3