Asterisk - The Open Source Telephony Project GIT-master-27fb039
Loading...
Searching...
No Matches
Functions | Variables
func_shell.c File Reference
#include "asterisk.h"
#include "asterisk/module.h"
#include "asterisk/channel.h"
#include "asterisk/pbx.h"
#include "asterisk/utils.h"
#include "asterisk/app.h"
Include dependency graph for func_shell.c:

Go to the source code of this file.

Functions

static void __reg_module (void)
 
static void __unreg_module (void)
 
struct ast_moduleAST_MODULE_SELF_SYM (void)
 
static int load_module (void)
 
static int shell_helper (struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len)
 
static int unload_module (void)
 

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Collects the output generated by a command executed by the system shell" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, .support_level = AST_MODULE_SUPPORT_CORE, }
 
static const struct ast_module_infoast_module_info = &__mod_info
 
static struct ast_custom_function shell_function
 

Detailed Description

SHELL function to return the output generated by a command issued to the system shell.

Note
Inspiration and Guidance from Russell! Thank You!
Author
Brandon Kruse bkrus.nosp@m.e@di.nosp@m.gium..nosp@m.com

Definition in file func_shell.c.

Function Documentation

◆ __reg_module()

static void __reg_module ( void  )
static

Definition at line 129 of file func_shell.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 129 of file func_shell.c.

◆ AST_MODULE_SELF_SYM()

struct ast_module * AST_MODULE_SELF_SYM ( void  )

Definition at line 129 of file func_shell.c.

◆ load_module()

static int load_module ( void  )
static

Definition at line 124 of file func_shell.c.

125{
127}
static struct ast_custom_function shell_function
Definition func_shell.c:114
#define ast_custom_function_register_escalating(acf, escalation)
Register a custom function which requires escalated privileges.
Definition pbx.h:1571
@ AST_CFE_READ
Definition pbx.h:1554

References AST_CFE_READ, ast_custom_function_register_escalating, and shell_function.

◆ shell_helper()

static int shell_helper ( struct ast_channel chan,
const char *  cmd,
char *  data,
char *  buf,
size_t  len 
)
static

Definition at line 40 of file func_shell.c.

42{
43 int res = 0;
44
45 if (ast_strlen_zero(data)) {
46 ast_log(LOG_WARNING, "Missing Argument! Example: Set(foo=${SHELL(echo \"bar\")})\n");
47 return -1;
48 }
49
50 if (chan) {
52 }
53
54 if (len >= 1) {
55 FILE *ptr;
56 char plbuff[4096];
57
58 ptr = popen(data, "r");
59 if (ptr) {
60 while (fgets(plbuff, sizeof(plbuff), ptr)) {
61 strncat(buf, plbuff, len - strlen(buf) - 1);
62 }
63 pclose(ptr);
64 } else {
65 ast_log(LOG_WARNING, "Failed to execute shell command '%s'\n", data);
66 res = -1;
67 }
68 }
69
70 if (chan) {
72 }
73
74 return res;
75}
#define ast_log
Definition astobj2.c:42
int ast_autoservice_stop(struct ast_channel *chan)
Stop servicing a channel for us...
int ast_autoservice_start(struct ast_channel *chan)
Automatically service a channel for us...
char buf[BUFSIZE]
Definition eagi_proxy.c:66
static int len(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t buflen)
#define LOG_WARNING
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition strings.h:65

References ast_autoservice_start(), ast_autoservice_stop(), ast_log, ast_strlen_zero(), buf, len(), and LOG_WARNING.

◆ unload_module()

static int unload_module ( void  )
static

Definition at line 119 of file func_shell.c.

120{
122}
int ast_custom_function_unregister(struct ast_custom_function *acf)
Unregister a custom function.

References ast_custom_function_unregister(), and shell_function.

Variable Documentation

◆ __mod_info

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Collects the output generated by a command executed by the system shell" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, .support_level = AST_MODULE_SUPPORT_CORE, }
static

Definition at line 129 of file func_shell.c.

◆ ast_module_info

const struct ast_module_info* ast_module_info = &__mod_info
static

Definition at line 129 of file func_shell.c.

◆ shell_function

struct ast_custom_function shell_function
static
Initial value:
= {
.name = "SHELL",
.read = shell_helper,
}
static int shell_helper(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t len)
Definition func_shell.c:40

Definition at line 114 of file func_shell.c.

114 {
115 .name = "SHELL",
116 .read = shell_helper,
117};

Referenced by load_module(), and unload_module().