Properly deal with quotes in the arguments of '#exec' includes.

(closes issue #15583)
 Reported by: pkempgen
 Patches: 
       20090726__issue15583.diff.txt uploaded by tilghman (license 14)
       20090726__issue15583-1.4-4.diff.txt uploaded by pkempgen (license 169)
 Tested by: pkempgen


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@219023 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Tilghman Lesher
2009-09-16 23:21:53 +00:00
parent 6913d06d19
commit d28e69ad5d
2 changed files with 23 additions and 9 deletions

View File

@@ -717,16 +717,25 @@ static int process_text_line(struct ast_config *cfg, struct ast_category **cat,
}
if (do_include || do_exec) {
if (c) {
/* Strip off leading and trailing "'s and <>'s */
while((*c == '<') || (*c == '>') || (*c == '\"')) c++;
/* Get rid of leading mess */
cur = c;
while (!ast_strlen_zero(cur)) {
c = cur + strlen(cur) - 1;
if ((*c == '>') || (*c == '<') || (*c == '\"'))
*c = '\0';
else
break;
/* Strip off leading and trailing "'s and <>'s */
if (*c == '"') {
/* Dequote */
while (*c) {
if (*c == '"') {
strcpy(c, c + 1); /* SAFE */
c--;
} else if (*c == '\\') {
strcpy(c, c + 1); /* SAFE */
}
c++;
}
} else if (*c == '<') {
/* C-style include */
if (*(c + strlen(c) - 1) == '>') {
cur++;
*(c + strlen(c) - 1) = '\0';
}
}
/* #exec </path/to/executable>
We create a tmp file, then we #include it, then we delete it. */