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 | |
AST_MODULE_INFO_STANDARD (ASTERISK_GPL_KEY,"Generic System() application") | |
AST_THREADSTORAGE (buf_buf) | |
static int | load_module (void) |
static int | system_exec (struct ast_channel *chan, const char *data) |
static int | system_exec_helper (struct ast_channel *chan, const char *data, int failmode) |
static int | trysystem_exec (struct ast_channel *chan, const char *data) |
static int | unload_module (void) |
Variables | |
static char * | app = "System" |
static char * | app2 = "TrySystem" |
static char * | chanvar = "SYSTEMSTATUS" |
Execute arbitrary system commands.
Definition in file app_system.c.
AST_MODULE_INFO_STANDARD | ( | ASTERISK_GPL_KEY | , | |
"Generic System() application" | ||||
) |
AST_THREADSTORAGE | ( | buf_buf | ) |
static int load_module | ( | void | ) | [static] |
Definition at line 176 of file app_system.c.
References ast_register_application_xml, system_exec(), and trysystem_exec().
00177 { 00178 int res; 00179 00180 res = ast_register_application_xml(app2, trysystem_exec); 00181 res |= ast_register_application_xml(app, system_exec); 00182 00183 return res; 00184 }
static int system_exec | ( | struct ast_channel * | chan, | |
const char * | data | |||
) | [static] |
Definition at line 156 of file app_system.c.
References system_exec_helper().
Referenced by load_module().
00157 { 00158 return system_exec_helper(chan, data, -1); 00159 }
static int system_exec_helper | ( | struct ast_channel * | chan, | |
const char * | data, | |||
int | failmode | |||
) | [static] |
Definition at line 107 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(), errno, LOG_NOTICE, LOG_WARNING, and pbx_builtin_setvar_helper().
Referenced by system_exec(), and trysystem_exec().
00108 { 00109 int res = 0; 00110 struct ast_str *buf = ast_str_thread_get(&buf_buf, 16); 00111 char *cbuf; 00112 00113 if (ast_strlen_zero(data)) { 00114 ast_log(LOG_WARNING, "System requires an argument(command)\n"); 00115 pbx_builtin_setvar_helper(chan, chanvar, "FAILURE"); 00116 return failmode; 00117 } 00118 00119 ast_autoservice_start(chan); 00120 00121 /* Do our thing here */ 00122 ast_str_get_encoded_str(&buf, 0, (char *) data); 00123 cbuf = ast_str_buffer(buf); 00124 00125 if (strchr("\"'", cbuf[0]) && cbuf[ast_str_strlen(buf) - 1] == cbuf[0]) { 00126 cbuf[ast_str_strlen(buf) - 1] = '\0'; 00127 cbuf++; 00128 ast_log(LOG_NOTICE, "It is not necessary to quote the argument to the System application.\n"); 00129 } 00130 00131 res = ast_safe_system(cbuf); 00132 00133 if ((res < 0) && (errno != ECHILD)) { 00134 ast_log(LOG_WARNING, "Unable to execute '%s'\n", (char *)data); 00135 pbx_builtin_setvar_helper(chan, chanvar, "FAILURE"); 00136 res = failmode; 00137 } else if (res == 127) { 00138 ast_log(LOG_WARNING, "Unable to execute '%s'\n", (char *)data); 00139 pbx_builtin_setvar_helper(chan, chanvar, "FAILURE"); 00140 res = failmode; 00141 } else { 00142 if (res < 0) 00143 res = 0; 00144 if (res != 0) 00145 pbx_builtin_setvar_helper(chan, chanvar, "APPERROR"); 00146 else 00147 pbx_builtin_setvar_helper(chan, chanvar, "SUCCESS"); 00148 res = 0; 00149 } 00150 00151 ast_autoservice_stop(chan); 00152 00153 return res; 00154 }
static int trysystem_exec | ( | struct ast_channel * | chan, | |
const char * | data | |||
) | [static] |
Definition at line 161 of file app_system.c.
References system_exec_helper().
Referenced by load_module().
00162 { 00163 return system_exec_helper(chan, data, 0); 00164 }
static int unload_module | ( | void | ) | [static] |
Definition at line 166 of file app_system.c.
References ast_unregister_application().
00167 { 00168 int res; 00169 00170 res = ast_unregister_application(app); 00171 res |= ast_unregister_application(app2); 00172 00173 return res; 00174 }
char* app = "System" [static] |
Definition at line 101 of file app_system.c.
char* app2 = "TrySystem" [static] |
Definition at line 103 of file app_system.c.
char* chanvar = "SYSTEMSTATUS" [static] |
Definition at line 105 of file app_system.c.
Referenced by function_sippeer(), and load_config().