Execute arbitrary system commands. More...
#include "asterisk.h"
#include "asterisk/pbx.h"
#include "asterisk/module.h"
#include "asterisk/app.h"
#include "asterisk/channel.h"
#include "asterisk/strings.h"
#include "asterisk/threadstorage.h"
Go to the source code of this file.
Functions | |
static void | __reg_module (void) |
static void | __unreg_module (void) |
AST_THREADSTORAGE_CUSTOM_SCOPE (buf_buf, NULL, ast_free_ptr, static) | |
static int | load_module (void) |
static int | system_exec (struct ast_channel *chan, void *data) |
static int | system_exec_helper (struct ast_channel *chan, void *data, int failmode) |
static int | trysystem_exec (struct ast_channel *chan, void *data) |
static int | unload_module (void) |
Variables | |
static struct ast_module_info __MODULE_INFO_SECTION | __mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "Generic System() application" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, } |
static char * | app = "System" |
static char * | app2 = "TrySystem" |
static struct ast_module_info * | ast_module_info = &__mod_info |
static char * | chanvar = "SYSTEMSTATUS" |
Execute arbitrary system commands.
Definition in file app_system.c.
static void __reg_module | ( | void | ) | [static] |
Definition at line 182 of file app_system.c.
static void __unreg_module | ( | void | ) | [static] |
Definition at line 182 of file app_system.c.
AST_THREADSTORAGE_CUSTOM_SCOPE | ( | buf_buf | , |
NULL | , | ||
ast_free_ptr | , | ||
static | |||
) |
static int load_module | ( | void | ) | [static] |
Definition at line 172 of file app_system.c.
References ast_register_application_xml, system_exec(), and trysystem_exec().
{ int res; res = ast_register_application_xml(app2, trysystem_exec); res |= ast_register_application_xml(app, system_exec); return res; }
static int system_exec | ( | struct ast_channel * | chan, |
void * | data | ||
) | [static] |
Definition at line 152 of file app_system.c.
References system_exec_helper().
Referenced by load_module().
{ return system_exec_helper(chan, data, -1); }
static int system_exec_helper | ( | struct ast_channel * | chan, |
void * | data, | ||
int | failmode | ||
) | [static] |
Definition at line 103 of file app_system.c.
References ast_autoservice_start(), ast_autoservice_stop(), ast_log(), ast_safe_system(), ast_str_buffer(), ast_str_get_encoded_str(), ast_str_strlen(), ast_str_thread_get(), ast_strlen_zero(), buf, errno, LOG_NOTICE, LOG_WARNING, and pbx_builtin_setvar_helper().
Referenced by system_exec(), and trysystem_exec().
{ int res = 0; struct ast_str *buf = ast_str_thread_get(&buf_buf, 16); char *cbuf; if (ast_strlen_zero(data)) { ast_log(LOG_WARNING, "System requires an argument(command)\n"); pbx_builtin_setvar_helper(chan, chanvar, "FAILURE"); return failmode; } ast_autoservice_start(chan); /* Do our thing here */ ast_str_get_encoded_str(&buf, 0, (char *) data); cbuf = ast_str_buffer(buf); if (strchr("\"'", cbuf[0]) && cbuf[ast_str_strlen(buf) - 1] == cbuf[0]) { cbuf[ast_str_strlen(buf) - 1] = '\0'; cbuf++; ast_log(LOG_NOTICE, "It is not necessary to quote the argument to the System application.\n"); } res = ast_safe_system(cbuf); if ((res < 0) && (errno != ECHILD)) { ast_log(LOG_WARNING, "Unable to execute '%s'\n", (char *)data); pbx_builtin_setvar_helper(chan, chanvar, "FAILURE"); res = failmode; } else if (res == 127) { ast_log(LOG_WARNING, "Unable to execute '%s'\n", (char *)data); pbx_builtin_setvar_helper(chan, chanvar, "FAILURE"); res = failmode; } else { if (res < 0) res = 0; if (res != 0) pbx_builtin_setvar_helper(chan, chanvar, "APPERROR"); else pbx_builtin_setvar_helper(chan, chanvar, "SUCCESS"); res = 0; } ast_autoservice_stop(chan); return res; }
static int trysystem_exec | ( | struct ast_channel * | chan, |
void * | data | ||
) | [static] |
Definition at line 157 of file app_system.c.
References system_exec_helper().
Referenced by load_module().
{ return system_exec_helper(chan, data, 0); }
static int unload_module | ( | void | ) | [static] |
Definition at line 162 of file app_system.c.
References ast_unregister_application().
{ int res; res = ast_unregister_application(app); res |= ast_unregister_application(app2); return res; }
struct ast_module_info __MODULE_INFO_SECTION __mod_info = { __MODULE_INFO_GLOBALS .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "Generic System() application" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, } [static] |
Definition at line 182 of file app_system.c.
char* app = "System" [static] |
Definition at line 97 of file app_system.c.
char* app2 = "TrySystem" [static] |
Definition at line 99 of file app_system.c.
struct ast_module_info* ast_module_info = &__mod_info [static] |
Definition at line 182 of file app_system.c.
char* chanvar = "SYSTEMSTATUS" [static] |
Definition at line 101 of file app_system.c.
Referenced by function_sippeer(), and load_config().