diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-12-27 02:02:23 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-12-27 02:02:23 +0000 |
commit | c12493b76531de8199f33a2a34238f7def8b194b (patch) | |
tree | 78695566ff2240d3c05e57ce0387b21898da632d /funcs | |
parent | e0618cf82a07fc7020f3d9b348fde91e9672feeb (diff) |
Add SQL_ESC to allow single ticks to be escaped
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@7642 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'funcs')
-rw-r--r-- | funcs/func_odbc.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/funcs/func_odbc.c b/funcs/func_odbc.c index 770ac8092..496933ef0 100644 --- a/funcs/func_odbc.c +++ b/funcs/func_odbc.c @@ -351,6 +351,35 @@ acf_out: return buf; } +static char *acf_escape(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) +{ + char *in, *out = buf; + for (in = data; *in && out - buf < len; in++) { + if (*in == '\'') { + *out = '\''; + out++; + } + *out = *in; + out++; + } + *out = '\0'; + return buf; +} + +struct ast_custom_function escape_function = { + .name = "SQL_ESC", + .synopsis = "Escapes single ticks for use in SQL statements", + .syntax = "SQL_ESC(<string>)", + .desc = +"Used in SQL templates to escape data which may contain single ticks (') which\n" +"are otherwise used to delimit data. For example:\n" +"SELECT foo FROM bar WHERE baz='${SQL_ESC(${ARG1})}'\n", + .read = acf_escape, + .write = NULL, +}; + + + static int init_acf_query(struct ast_config *cfg, char *catg, struct acf_odbc_query **query) { char *tmp; @@ -477,6 +506,7 @@ static int odbc_load_module(void) } ast_config_destroy(cfg); + ast_custom_function_register(&escape_function); out: ast_mutex_unlock(&query_lock); return res; @@ -507,6 +537,8 @@ static int odbc_unload_module(void) free(lastquery); queries = NULL; + ast_custom_function_unregister(&escape_function); + ast_mutex_unlock(&query_lock); return 0; } |