Parse global variables or expressions in hint extensions
authorMatthias Nick <mnick@digium.com>
Fri, 4 Dec 2009 17:15:47 +0000 (17:15 +0000)
committerMatthias Nick <mnick@digium.com>
Fri, 4 Dec 2009 17:15:47 +0000 (17:15 +0000)
Parse global variables or expressions in hint extensions. Like: exten => 400,hint,DAHDI/i2/${GLOBAL(var)}

(closes issue #16166)
Reported by: rmudgett
Tested by: mnick, rmudgett

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@233093 65c4cc65-6c06-0410-ace0-fbb531ad65f3

pbx/pbx_config.c

index a14ad69..6e4fa57 100644 (file)
@@ -1496,13 +1496,29 @@ process_extension:
                                        /* No arguments */
                                        data = "";
                                } else {
+                                       char *orig_appl = ast_strdup(appl);
+
+                                       if (!orig_appl)
+                                               return -1;
+                                       
                                        appl = strsep(&stringp, "(");
-                                       data = S_OR(stringp, "");
-                                       if ((end = strrchr(data, ')'))) {
-                                               *end = '\0';
+
+                                       /* check if there are variables or expressions without an application, like: exten => 100,hint,DAHDI/g0/${GLOBAL(var)}  */
+                                       if (strstr(appl, "${") || strstr(appl, "$[")){
+                                               /* set appl to original one */
+                                               strcpy(appl, orig_appl);
+                                               /* set no data */
+                                               data = "";
+                                       /* no variable before application found -> go ahead */
                                        } else {
-                                               ast_log(LOG_WARNING, "No closing parenthesis found? '%s(%s'\n", appl, data);
+                                               data = S_OR(stringp, "");
+                                               if ((end = strrchr(data, ')'))) {
+                                                       *end = '\0';
+                                               } else {
+                                                       ast_log(LOG_WARNING, "No closing parenthesis found? '%s(%s'\n", appl, data);
+                                               }
                                        }
+                                       ast_free(orig_appl);
                                }
 
                                appl = ast_skip_blanks(appl);