]> git.ipfire.org Git - thirdparty/asterisk.git/commit
config.c: Make ast_variable_retrieve return last match.
authorNaveen Albert <asterisk@phreaknet.org>
Wed, 9 Aug 2023 22:30:53 +0000 (22:30 +0000)
committerasterisk-org-access-app[bot] <120671045+asterisk-org-access-app[bot]@users.noreply.github.com>
Tue, 10 Dec 2024 13:35:02 +0000 (13:35 +0000)
commitc157ee62f666a83d883a11cbb7cb684ed2d2320f
tree496c6d0d549daee3cda5fb4893748ed4f5e87361
parent634b57b8e69d8e7e1661257ea731377f2331d14f
config.c: Make ast_variable_retrieve return last match.

ast_variable_retrieve currently returns the first match
for a variable, as opposed to the last one. This is problematic
because modules that load config settings by explicitly
calling ast_variable_retrieve on a variable name (as opposed
to iterating through all the directives as specified) will
end up taking the first specified value, such as the default
value from the template rather than the actual effective value
in an individual config section, leading to the wrong config.

This fixes this by making ast_variable_retrieve return the last
match, or the most recently overridden one, as the effective setting.
This is similar to what the -1 index in the AST_CONFIG function does.

There is another function, ast_variable_find_last_in_list, that does
something similar. However, it's a slightly different API, and it
sees virtually no usage in Asterisk. ast_variable_retrieve is what
most things use so this is currently the relevant point of breakage.

In practice, this is unlikely to cause any breakage, since there
would be no logical reason to use an inherited value rather than
an explicitly overridden value when loading a config.

ASTERISK-30370 #close

Resolves: #244

UpgradeNote: Config variables retrieved explicitly by name now return
the most recently overriding value as opposed to the base value (e.g.
from a template). This is equivalent to retrieving a config setting
using the -1 index to the AST_CONFIG function. The major implication of
this is that modules processing configs by explicitly retrieving variables
by name will now get the effective value of a variable as overridden in
a config rather than the first-set value (from a template), which is
consistent with how other modules load config settings.
main/config.c