vtysh: improve config-write error reporting

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
David Lamparter 2016-11-09 15:05:14 +01:00
parent 87f44e2f0b
commit c10c5926cb
2 changed files with 12 additions and 7 deletions

View File

@ -2479,9 +2479,9 @@ vtysh_write_config_integrated(void)
fp = fopen (quagga_config, "w"); fp = fopen (quagga_config, "w");
if (fp == NULL) 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)); quagga_config, safe_strerror(errno));
return CMD_SUCCESS; return CMD_WARNING;
} }
fd = fileno (fp); fd = fileno (fp);
@ -2538,12 +2538,11 @@ vtysh_write_config_integrated(void)
fclose (fp); fclose (fp);
printf ("Integrated configuration saved to %s\n", quagga_config);
if (err) if (err)
return CMD_WARNING; return CMD_WARNING;
fprintf (stdout,"Integrated configuration saved to %s\n", quagga_config); printf ("[OK]\n");
fprintf (stdout,"[OK]\n");
return CMD_SUCCESS; return CMD_SUCCESS;
} }
@ -2589,9 +2588,9 @@ DEFUN (vtysh_write_memory,
if (ret != CMD_SUCCESS) 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 " "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(); ret = vtysh_write_config_integrated();
} }
return ret; return ret;

View File

@ -113,6 +113,12 @@ void integrated_write_sigchld(int status)
zlog_warn("configuration write terminated"); 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 /* don't care about failures here, if the connection is broken the
* return value will just be lost. */ * return value will just be lost. */
write(integrated_result_fd, reply, sizeof(reply)); write(integrated_result_fd, reply, sizeof(reply));