]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 233093 via svnmerge from
authorMatthias Nick <mnick@digium.com>
Fri, 4 Dec 2009 21:00:46 +0000 (21:00 +0000)
committerMatthias Nick <mnick@digium.com>
Fri, 4 Dec 2009 21:00:46 +0000 (21:00 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

........
  r233093 | mnick | 2009-12-04 11:15:47 -0600 (Fri, 04 Dec 2009) | 8 lines

  Parse global variables or expressions in hint extensions

  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/branches/1.6.1@233238 65c4cc65-6c06-0410-ace0-fbb531ad65f3

pbx/pbx_config.c

index 4ff5d1fe37e176ca03400cf0da036ccf28a9202e..d69f1c54c23c216e2079050009ab32090bb599aa 100644 (file)
@@ -1450,14 +1450,29 @@ static int pbx_load_config(const char *config_file)
                                                /* No arguments */
                                                data = "";
                                        } else {
+                                               char *orig_appl = ast_strdup(appl);
+
+                                               if (!orig_appl)
+                                                       return -1;
+
                                                appl = strsep(&stringp, "(");
-                                               data = stringp;
-                                               end = strrchr(data, ')');
-                                               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);
                                        }
 
                                        if (!data)