summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2017-05-19 16:18:55 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2017-05-19 17:44:09 +0200
commitaf8aac9b544cb64df3b77a413dfded23e976d1b0 (patch)
treea1c4826133ea471070b9d365423b1e3a6b3fc82f
parent5a67130e1548bd9314fbd007e131ef378d8b51c7 (diff)
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
-rw-r--r--src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c77
1 files 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 1358cf4abc..fabff68fe2 100644
--- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
+++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
@@ -1915,12 +1915,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);
@@ -1934,36 +1930,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;
@@ -2474,32 +2468,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;