--- asterisk-1.4.22/pbx/pbx_config.c 2008-07-04 11:11:03.000000000 -0500 +++ asterisk-1.4.22-patched/pbx/pbx_config.c 2008-12-31 20:27:58.000000000 -0600 @@ -50,6 +50,7 @@ static int write_protect_config = 1; static int autofallthrough_config = 1; static int clearglobalvars_config = 0; +static char globalcontext[AST_MAX_EXTENSION] = ""; AST_MUTEX_DEFINE_STATIC(save_dialplan_lock); @@ -1303,11 +1304,12 @@ } /* fireout general info */ - fprintf(output, "[general]\nstatic=%s\nwriteprotect=%s\nautofallthrough=%s\nclearglobalvars=%s\npriorityjumping=%s\n\n", + fprintf(output, "[general]\nstatic=%s\nwriteprotect=%s\nautofallthrough=%s\nclearglobalvars=%s\nglobalcontext=%s\npriorityjumping=%s\n\n", static_config ? "yes" : "no", write_protect_config ? "yes" : "no", autofallthrough_config ? "yes" : "no", clearglobalvars_config ? "yes" : "no", + globalcontext, ast_true(ast_variable_retrieve(cfg, "general", "priorityjumping")) ? "yes" : "no"); if ((v = ast_variable_browse(cfg, "globals"))) { @@ -2239,6 +2241,7 @@ struct ast_variable *v; const char *cxt; const char *aft; + const char *gcxt; cfg = ast_config_load(config_file); if (!cfg) @@ -2256,6 +2259,11 @@ ast_copy_string(userscontext, cxt, sizeof(userscontext)); else ast_copy_string(userscontext, "default", sizeof(userscontext)); + + if ((gcxt = ast_variable_retrieve(cfg, "general", "globalcontext"))) + ast_copy_string(globalcontext, gcxt, sizeof(globalcontext)); + else + ast_copy_string(globalcontext, "", sizeof(globalcontext)); for (v = ast_variable_browse(cfg, "globals"); v; v = v->next) { memset(realvalue, 0, sizeof(realvalue)); @@ -2270,6 +2278,12 @@ if (con == NULL) continue; + if (!ast_strlen_zero(globalcontext) && strcasecmp(globalcontext, cxt)) { + int res = ast_context_add_include2(con, globalcontext, registrar); + if (res && errno != EEXIST) + ast_log(LOG_WARNING, "Unable to include context '%s' in context '%s'\n", globalcontext, cxt); + } + for (v = ast_variable_browse(cfg, cxt); v; v = v->next) { if (!strcasecmp(v->name, "exten")) { char *tc = ast_strdup(v->value);