mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-18 18:58:22 +00:00
make IF dialplan function handle quoted strings properly (bug #4322, with API mods)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5750 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -55,6 +55,12 @@ static char *builtin_function_if(struct ast_channel *chan, char *cmd, char *data
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (expr && iftrue) {
|
if (expr && iftrue) {
|
||||||
|
expr = ast_strip_quoted(expr, "\"", "\"");
|
||||||
|
iftrue = ast_strip_quoted(iftrue, "\"", "\"");
|
||||||
|
|
||||||
|
if (iffalse) {
|
||||||
|
iffalse = ast_strip_quoted(iffalse, "\"", "\"");
|
||||||
|
}
|
||||||
ret = ast_true(expr) ? iftrue : iffalse;
|
ret = ast_true(expr) ? iftrue : iffalse;
|
||||||
if (ret) {
|
if (ret) {
|
||||||
ast_copy_string(buf, ret, len);
|
ast_copy_string(buf, ret, len);
|
||||||
|
@@ -130,7 +130,43 @@ struct ast_hostent {
|
|||||||
char buf[1024];
|
char buf[1024];
|
||||||
};
|
};
|
||||||
|
|
||||||
extern char *ast_strip(char *buf);
|
/*!
|
||||||
|
\brief Strip leading/trailing whitespace from a string.
|
||||||
|
\param s The string to be stripped (will be modified).
|
||||||
|
\return The stripped string.
|
||||||
|
|
||||||
|
This functions strips all leading and trailing whitespace
|
||||||
|
characters from the input string, and returns a pointer to
|
||||||
|
the resulting string. The string is modified in place.
|
||||||
|
*/
|
||||||
|
char *ast_strip(char *s);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Strip leading/trailing whitespace and quotes from a string.
|
||||||
|
\param s The string to be stripped (will be modified).
|
||||||
|
\param beg_quotes The list of possible beginning quote characters.
|
||||||
|
\param end_quotes The list of matching ending quote characters.
|
||||||
|
\return The stripped string.
|
||||||
|
|
||||||
|
This functions strips all leading and trailing whitespace
|
||||||
|
characters from the input string, and returns a pointer to
|
||||||
|
the resulting string. The string is modified in place.
|
||||||
|
|
||||||
|
It can also remove beginning and ending quote (or quote-like)
|
||||||
|
characters, in matching pairs. If the first character of the
|
||||||
|
string matches any character in beg_quotes, and the last
|
||||||
|
character of the string is the matching character in
|
||||||
|
end_quotes, then they are removed from the string.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
\code
|
||||||
|
ast_strip_quoted(buf, "\"", "\"");
|
||||||
|
ast_strip_quoted(buf, "'", "'");
|
||||||
|
ast_strip_quoted(buf, "[{(", "]})");
|
||||||
|
\endcode
|
||||||
|
*/
|
||||||
|
char *ast_strip_quoted(char *s, const char *beg_quotes, const char *end_quotes);
|
||||||
|
|
||||||
extern struct hostent *ast_gethostbyname(const char *host, struct ast_hostent *hp);
|
extern struct hostent *ast_gethostbyname(const char *host, struct ast_hostent *hp);
|
||||||
/* ast_md5_hash: Produces MD5 hash based on input string */
|
/* ast_md5_hash: Produces MD5 hash based on input string */
|
||||||
extern void ast_md5_hash(char *output, char *input);
|
extern void ast_md5_hash(char *output, char *input);
|
||||||
|
36
utils.c
36
utils.c
@@ -33,17 +33,33 @@
|
|||||||
static char base64[64];
|
static char base64[64];
|
||||||
static char b2a[256];
|
static char b2a[256];
|
||||||
|
|
||||||
char *ast_strip(char *buf)
|
char *ast_strip(char *s)
|
||||||
{
|
{
|
||||||
char *start;
|
char *e;
|
||||||
/* Strip off trailing whitespace, returns, etc */
|
|
||||||
while (!ast_strlen_zero(buf) && (buf[strlen(buf)-1]<33))
|
while (*s && (*s < 33)) s++;
|
||||||
buf[strlen(buf)-1] = '\0';
|
e = s + strlen(s) - 1;
|
||||||
start = buf;
|
while ((e > s) && (*e < 33)) e--;
|
||||||
/* Strip off leading whitespace, returns, etc */
|
*++e = '\0';
|
||||||
while (*start && (*start < 33))
|
|
||||||
*start++ = '\0';
|
return s;
|
||||||
return start;
|
}
|
||||||
|
|
||||||
|
char *ast_strip_quoted(char *s, const char *beg_quotes, const char *end_quotes)
|
||||||
|
{
|
||||||
|
char *e;
|
||||||
|
char *q;
|
||||||
|
|
||||||
|
s = ast_strip(s);
|
||||||
|
if ((q = strchr(beg_quotes, *s))) {
|
||||||
|
e = s + strlen(s) - 1;
|
||||||
|
if (*e == *(end_quotes + (q - beg_quotes))) {
|
||||||
|
s++;
|
||||||
|
*e = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined( __NetBSD__ ) || defined(__APPLE__)
|
#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined( __NetBSD__ ) || defined(__APPLE__)
|
||||||
|
Reference in New Issue
Block a user