From 5316f49a2d1f1c75dbfad7971bbb439f29e5c042 Mon Sep 17 00:00:00 2001 From: Richard Mudgett Date: Wed, 27 Jul 2016 17:17:53 -0500 Subject: pbx.c: Allow dangerous functions when adding a hint to dialplan. We can allow dangerous functions when adding a hint since altering dialplan is itself a privileged activity. Otherwise, we could never execute dangerous functions. ASTERISK-25996 #close Reported by: Andrew Nagy Change-Id: I4929ff100ad1200a0198262d069a34f2296e77ba --- main/pbx.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'main/pbx.c') diff --git a/main/pbx.c b/main/pbx.c index f9fad0388..65ba8e1aa 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -7153,13 +7153,25 @@ static int ast_add_extension2_lockopt(struct ast_context *con, /* If we are adding a hint evalulate in variables and global variables */ if (priority == PRIORITY_HINT && strstr(application, "${") && extension[0] != '_') { + int inhibited; struct ast_channel *c = ast_dummy_channel_alloc(); if (c) { ast_channel_exten_set(c, extension); ast_channel_context_set(c, con->name); } + + /* + * We can allow dangerous functions when adding a hint since + * altering dialplan is itself a privileged activity. Otherwise, + * we could never execute dangerous functions. + */ + inhibited = ast_thread_inhibit_escalations_swap(0); pbx_substitute_variables_helper(c, application, expand_buf, sizeof(expand_buf)); + if (0 < inhibited) { + ast_thread_inhibit_escalations(); + } + application = expand_buf; if (c) { ast_channel_unref(c); -- cgit v1.2.3