Index: pbx/pbx_config.c =================================================================== --- pbx/pbx_config.c (revision 146799) +++ pbx/pbx_config.c (working copy) @@ -1410,6 +1410,7 @@ const char *aft; const char *newpm, *ovsw; struct ast_flags config_flags = { 0 }; + char lastextension[256] = ""; cfg = ast_config_load(config_file, config_flags); if (!cfg) return 0; @@ -1451,18 +1452,26 @@ continue; for (v = ast_variable_browse(cfg, cxt); v; v = v->next) { - if (!strcasecmp(v->name, "exten")) { - char *tc = ast_strdup(v->value); - if (tc) { + char *tc = NULL; + char realext[256] = ""; + char *stringp, *ext; + if (!strncasecmp(v->name, "same", 4)) { + if ((stringp = tc = ast_strdup(v->value))) { + ast_copy_string(realext, lastextension, sizeof(realext)); + goto copy_last_extension; + } + } else if (!strcasecmp(v->name, "exten")) { + if ((tc = ast_strdup(v->value))) { int ipri = -2; - char realext[256]=""; char *plus, *firstp; char *pri, *appl, *data, *cidmatch; - char *stringp = tc; - char *ext = strsep(&stringp, ","); - if (!ext) - ext=""; + stringp = tc; + if (!(ext = strsep(&stringp, ","))) { + ext = ""; + } pbx_substitute_variables_helper(NULL, ext, realext, sizeof(realext) - 1); + ast_copy_string(lastextension, realext, sizeof(lastextension)); +copy_last_extension: cidmatch = strchr(realext, '/'); if (cidmatch) { *cidmatch++ = '\0';