logger: Prevent duplicate dynamic channels from being added.
authorMark Michelson <mmichelson@digium.com>
Wed, 23 Sep 2015 19:02:15 +0000 (14:02 -0500)
committerMark Michelson <mmichelson@digium.com>
Thu, 24 Sep 2015 20:05:13 +0000 (15:05 -0500)
commit3eefa07a39bc46bd6bddb6631c7776c830377670
treee901168966545b5656a39b1a860d51221f994347
parent17dd4a476ccb77111797913a40a59eec274c188c
logger: Prevent duplicate dynamic channels from being added.

There was a problem observed where the "logger add channel" CLI command
would allow for a channel with the same name to be added multiple times.
This would result in each message being written out to the same file
multiple times.

The problem was due to the difference in how logger channel filenames
are stored versus the format they are allowed to be presented when they
are added. For instance, if adding the logger channel "foo" through the
CLI, the result would be a logger channel with the file name
/var/log/asterisk/foo being stored. So when trying to add another "foo"
channel, "foo" would not match "/var/log/asterisk/foo" so we'd happily
add the duplicate channel.

The fix presented here is to introduce two new methods in the logger
code:
 * make_filename(): given a logger channel name, this creates the
   filename for that logger channel.
 * find_logchannel(): given a logger channel name, this calls
   make_filename() and then traverses the list of logchannels in order
   to find a match.

This change has made use of make_filename() and find_logchannel()
throughout to more consistently behave.

ASTERISK-25305 #close
Reported by Mark Michelson

Change-Id: I892d52954d6007d8bc453c3cbdd9235dec9c4a36
main/logger.c