From c10c5926cbe10abcc5b4b4655e2b13c5b4622f5f Mon Sep 17 00:00:00 2001 From: David Lamparter Date: Wed, 9 Nov 2016 15:05:14 +0100 Subject: [PATCH] vtysh: improve config-write error reporting Signed-off-by: David Lamparter --- vtysh/vtysh.c | 13 ++++++------- watchquagga/watchquagga_vty.c | 6 ++++++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c index 6a5a97bd2a..17dd58a4a8 100644 --- a/vtysh/vtysh.c +++ b/vtysh/vtysh.c @@ -2479,9 +2479,9 @@ vtysh_write_config_integrated(void) fp = fopen (quagga_config, "w"); if (fp == NULL) { - fprintf (stdout,"%% Can't open configuration file %s due to '%s'\n", + fprintf (stdout,"%% Error: failed to open configuration file %s: %s\n", quagga_config, safe_strerror(errno)); - return CMD_SUCCESS; + return CMD_WARNING; } fd = fileno (fp); @@ -2538,12 +2538,11 @@ vtysh_write_config_integrated(void) fclose (fp); + printf ("Integrated configuration saved to %s\n", quagga_config); if (err) return CMD_WARNING; - fprintf (stdout,"Integrated configuration saved to %s\n", quagga_config); - fprintf (stdout,"[OK]\n"); - + printf ("[OK]\n"); return CMD_SUCCESS; } @@ -2589,9 +2588,9 @@ DEFUN (vtysh_write_memory, if (ret != CMD_SUCCESS) { - printf("Warning: attempting direct configuration write without " + printf("\nWarning: attempting direct configuration write without " "watchquagga.\nFile permissions and ownership may be " - "incorrect, or write may fail.\n"); + "incorrect, or write may fail.\n\n"); ret = vtysh_write_config_integrated(); } return ret; diff --git a/watchquagga/watchquagga_vty.c b/watchquagga/watchquagga_vty.c index bf413376af..b96011b760 100644 --- a/watchquagga/watchquagga_vty.c +++ b/watchquagga/watchquagga_vty.c @@ -113,6 +113,12 @@ void integrated_write_sigchld(int status) zlog_warn("configuration write terminated"); } + if (reply[3] != CMD_SUCCESS) { + /* failure might be silent in vtysh without this */ + static const char msg[] = "% Configuration write failed.\n"; + write(integrated_result_fd, msg, strlen(msg)); + } + /* don't care about failures here, if the connection is broken the * return value will just be lost. */ write(integrated_result_fd, reply, sizeof(reply)); -- 2.39.5