logging/vty: fix vty_read_file(): do not write warnings to stdin

Setting vty->fd to 0 is a bad idea, which may cause the process
to write() warnings to its own _stdin_ (yes, it's possible).
For example, when a configuration file contains deprecated
logging commands. Let's use stderr by default.

Change-Id: Icdeaea67a06da3a2f07b252e455629559ecc1829
This commit is contained in:
Vadim Yanitskiy 2019-11-21 02:20:11 +07:00
parent 4abda9ea26
commit b639b4d4f7
2 changed files with 6 additions and 5 deletions

View File

@ -1468,11 +1468,15 @@ vty_read_file(FILE *confp, void *priv)
struct vty *vty;
vty = vty_new();
vty->fd = 0;
vty->type = VTY_FILE;
vty->node = CONFIG_NODE;
vty->priv = priv;
/* By default, write to stderr. Otherwise, during parsing of the logging
* configuration, all invocations to vty_out() would make the process
* write() to its own stdin (fd=0)! */
vty->fd = fileno(stderr);
ret = config_from_file(vty, confp);
if (ret != CMD_SUCCESS) {

View File

@ -199,10 +199,7 @@ AT_SETUP([vty])
AT_KEYWORDS([vty])
cat $abs_srcdir/vty/vty_test.ok > expout
cp $abs_srcdir/vty/*.cfg .
# FIXME: calling vty_out() during initialization of the VTY interface would cause
# the process write to its own *stdin*! This breaks the output of 'make check'.
# Let's work this around untill the bug in libosmovty is fixed.
AT_CHECK([$abs_top_builddir/tests/vty/vty_test 0>/dev/null], [0], [expout], [ignore])
AT_CHECK([$abs_top_builddir/tests/vty/vty_test], [0], [expout], [ignore])
AT_CLEANUP
AT_SETUP([gprs-bssgp])