@ -1491,6 +1491,11 @@ static struct stasis_forward *rtp_topic_forwarder;
/*! \brief The \ref stasis_subscription for forwarding the Security topic to the AMI topic */
/*! \brief The \ref stasis_subscription for forwarding the Security topic to the AMI topic */
static struct stasis_forward * security_topic_forwarder ;
static struct stasis_forward * security_topic_forwarder ;
/*!
* \ brief Set to true ( non - zero ) to globally allow all dangerous AMI actions to run
*/
static int live_dangerously ;
# ifdef TEST_FRAMEWORK
# ifdef TEST_FRAMEWORK
/*! \brief The \ref stasis_subscription for forwarding the Test topic to the AMI topic */
/*! \brief The \ref stasis_subscription for forwarding the Test topic to the AMI topic */
static struct stasis_forward * test_suite_forwarder ;
static struct stasis_forward * test_suite_forwarder ;
@ -3610,6 +3615,29 @@ static int action_ping(struct mansession *s, const struct message *m)
return 0 ;
return 0 ;
}
}
void astman_live_dangerously ( int new_live_dangerously )
{
if ( new_live_dangerously & & ! live_dangerously )
{
ast_log ( LOG_WARNING , " Manager Configuration load protection disabled. \n " ) ;
}
if ( ! new_live_dangerously & & live_dangerously )
{
ast_log ( LOG_NOTICE , " Manager Configuration load protection enabled. \n " ) ;
}
live_dangerously = new_live_dangerously ;
}
static int restrictedFile ( const char * filename )
{
if ( ! live_dangerously & & ! strncasecmp ( filename , " / " , 1 ) & &
strncasecmp ( filename , ast_config_AST_CONFIG_DIR , strlen ( ast_config_AST_CONFIG_DIR ) ) ) {
return 1 ;
}
return 0 ;
}
static int action_getconfig ( struct mansession * s , const struct message * m )
static int action_getconfig ( struct mansession * s , const struct message * m )
{
{
struct ast_config * cfg ;
struct ast_config * cfg ;
@ -3628,6 +3656,11 @@ static int action_getconfig(struct mansession *s, const struct message *m)
return 0 ;
return 0 ;
}
}
if ( restrictedFile ( fn ) ) {
astman_send_error ( s , m , " File requires escalated priveledges " ) ;
return 0 ;
}
cfg = ast_config_load2 ( fn , " manager " , config_flags ) ;
cfg = ast_config_load2 ( fn , " manager " , config_flags ) ;
if ( cfg = = CONFIG_STATUS_FILEMISSING ) {
if ( cfg = = CONFIG_STATUS_FILEMISSING ) {
astman_send_error ( s , m , " Config file not found " ) ;
astman_send_error ( s , m , " Config file not found " ) ;
@ -3755,6 +3788,11 @@ static int action_getconfigjson(struct mansession *s, const struct message *m)
return 0 ;
return 0 ;
}
}
if ( restrictedFile ( fn ) ) {
astman_send_error ( s , m , " File requires escalated priveledges " ) ;
return 0 ;
}
if ( ! ( cfg = ast_config_load2 ( fn , " manager " , config_flags ) ) ) {
if ( ! ( cfg = ast_config_load2 ( fn , " manager " , config_flags ) ) ) {
astman_send_error ( s , m , " Config file not found " ) ;
astman_send_error ( s , m , " Config file not found " ) ;
return 0 ;
return 0 ;
@ -4106,6 +4144,10 @@ static int action_updateconfig(struct mansession *s, const struct message *m)
astman_send_error ( s , m , " Filename not specified " ) ;
astman_send_error ( s , m , " Filename not specified " ) ;
return 0 ;
return 0 ;
}
}
if ( restrictedFile ( sfn ) | | restrictedFile ( dfn ) ) {
astman_send_error ( s , m , " File requires escalated priveledges " ) ;
return 0 ;
}
if ( ! ( cfg = ast_config_load2 ( sfn , " manager " , config_flags ) ) ) {
if ( ! ( cfg = ast_config_load2 ( sfn , " manager " , config_flags ) ) ) {
astman_send_error ( s , m , " Config file not found " ) ;
astman_send_error ( s , m , " Config file not found " ) ;
return 0 ;
return 0 ;