pbx_config: Only the first [globals] section is seen.

If multiple [globals] sections are used (for example via separate
included files), only the first one is processed.  This can result in
lost global variables when using a modular extensions.conf.

ASTERISK-28146 #close

Change-Id: Iaac810c0a7c4d9b1bf8989fcc041cdb910ef08a0
This commit is contained in:
Corey Farrell 2018-11-02 07:38:19 -04:00
parent 907ea79a92
commit 07a59b783e
No known key found for this signature in database
GPG Key ID: D1B6E98EB07F7F6C
2 changed files with 19 additions and 3 deletions

View File

@ -12,6 +12,12 @@
--- Functionality changes from Asterisk 16.0.0 to Asterisk 16.1.0 ------------
------------------------------------------------------------------------------
pbx_config
------------------
* pbx_config will now find and process multiple 'globals' sections from
extensions.conf. Variables are processed in the order they are found
and duplicate variables overwrite the previous value.
res_pjsip
------------------
* New options 'trust_connected_line' and 'send_connected_line' have been

View File

@ -1714,10 +1714,20 @@ static int pbx_load_config(const char *config_file)
ast_copy_string(userscontext, ast_variable_retrieve(cfg, "general", "userscontext") ?: "default", sizeof(userscontext));
for (v = ast_variable_browse(cfg, "globals"); v; v = v->next) {
pbx_substitute_variables_helper(NULL, v->value, realvalue, sizeof(realvalue) - 1);
pbx_builtin_setvar_helper(NULL, v->name, realvalue);
/* ast_variable_browse does not merge multiple [globals] sections */
for (cxt = ast_category_browse(cfg, NULL);
cxt;
cxt = ast_category_browse(cfg, cxt)) {
if (strcasecmp(cxt, "globals")) {
continue;
}
for (v = ast_variable_browse(cfg, cxt); v; v = v->next) {
pbx_substitute_variables_helper(NULL, v->value, realvalue, sizeof(realvalue) - 1);
pbx_builtin_setvar_helper(NULL, v->name, realvalue);
}
}
for (cxt = ast_category_browse(cfg, NULL);
cxt;
cxt = ast_category_browse(cfg, cxt)) {