@ -328,6 +328,7 @@ static struct permalias {
{ EVENT_FLAG_REPORTING , " reporting " } ,
{ EVENT_FLAG_REPORTING , " reporting " } ,
{ EVENT_FLAG_CDR , " cdr " } ,
{ EVENT_FLAG_CDR , " cdr " } ,
{ EVENT_FLAG_DIALPLAN , " dialplan " } ,
{ EVENT_FLAG_DIALPLAN , " dialplan " } ,
{ EVENT_FLAG_ORIGINATE , " originate " } ,
{ - 1 , " all " } ,
{ - 1 , " all " } ,
{ 0 , " none " } ,
{ 0 , " none " } ,
} ;
} ;
@ -2156,8 +2157,23 @@ static int action_originate(struct mansession *s, const struct message *m)
}
}
}
}
} else if ( ! ast_strlen_zero ( app ) ) {
} else if ( ! ast_strlen_zero ( app ) ) {
/* To run the System application (or anything else that goes to shell), you must have the additional System privilege */
if ( ! ( s - > writeperm & EVENT_FLAG_SYSTEM )
& & (
strcasestr ( app , " system " ) = = 0 | | /* System(rm -rf /)
TrySystem ( rm - rf / ) */
strcasestr ( app , " exec " ) | | /* Exec(System(rm -rf /))
TryExec ( System ( rm - rf / ) ) */
strcasestr ( app , " agi " ) | | /* AGI(/bin/rm,-rf /)
EAGI ( / bin / rm , - rf / ) */
strstr ( appdata , " SHELL " ) | | /* NoOp(${SHELL(rm -rf /)}) */
strstr ( appdata , " EVAL " ) /* NoOp(${EVAL(${some_var_containing_SHELL})}) */
) ) {
astman_send_error ( s , m , " Originate with certain 'Application' arguments requires the additional System privilege, which you do not have. " ) ;
return 0 ;
}
res = ast_pbx_outgoing_app ( tech , AST_FORMAT_SLINEAR , data , to , app , appdata , & reason , 1 , l , n , vars , account , NULL ) ;
res = ast_pbx_outgoing_app ( tech , AST_FORMAT_SLINEAR , data , to , app , appdata , & reason , 1 , l , n , vars , account , NULL ) ;
} else {
} else {
if ( exten & & context & & pi )
if ( exten & & context & & pi )
res = ast_pbx_outgoing_exten ( tech , AST_FORMAT_SLINEAR , data , to , context , exten , pi , & reason , 1 , l , n , vars , account , NULL ) ;
res = ast_pbx_outgoing_exten ( tech , AST_FORMAT_SLINEAR , data , to , context , exten , pi , & reason , 1 , l , n , vars , account , NULL ) ;
else {
else {
@ -3641,7 +3657,7 @@ static int __init_manager(int reload)
ast_manager_register2 ( " CreateConfig " , EVENT_FLAG_CONFIG , action_createconfig , " Creates an empty file in the configuration directory " , mandescr_createconfig ) ;
ast_manager_register2 ( " CreateConfig " , EVENT_FLAG_CONFIG , action_createconfig , " Creates an empty file in the configuration directory " , mandescr_createconfig ) ;
ast_manager_register2 ( " ListCategories " , EVENT_FLAG_CONFIG , action_listcategories , " List categories in configuration file " , mandescr_listcategories ) ;
ast_manager_register2 ( " ListCategories " , EVENT_FLAG_CONFIG , action_listcategories , " List categories in configuration file " , mandescr_listcategories ) ;
ast_manager_register2 ( " Redirect " , EVENT_FLAG_CALL , action_redirect , " Redirect (transfer) a call " , mandescr_redirect ) ;
ast_manager_register2 ( " Redirect " , EVENT_FLAG_CALL , action_redirect , " Redirect (transfer) a call " , mandescr_redirect ) ;
ast_manager_register2 ( " Originate " , EVENT_FLAG_ CALL , action_originate , " Originate Call " , mandescr_originate ) ;
ast_manager_register2 ( " Originate " , EVENT_FLAG_ ORIGINATE , action_originate , " Originate Call " , mandescr_originate ) ;
ast_manager_register2 ( " Command " , EVENT_FLAG_COMMAND , action_command , " Execute Asterisk CLI Command " , mandescr_command ) ;
ast_manager_register2 ( " Command " , EVENT_FLAG_COMMAND , action_command , " Execute Asterisk CLI Command " , mandescr_command ) ;
ast_manager_register2 ( " ExtensionState " , EVENT_FLAG_CALL | EVENT_FLAG_REPORTING , action_extensionstate , " Check Extension Status " , mandescr_extensionstate ) ;
ast_manager_register2 ( " ExtensionState " , EVENT_FLAG_CALL | EVENT_FLAG_REPORTING , action_extensionstate , " Check Extension Status " , mandescr_extensionstate ) ;
ast_manager_register2 ( " AbsoluteTimeout " , EVENT_FLAG_SYSTEM | EVENT_FLAG_CALL , action_timeout , " Set Absolute Timeout " , mandescr_timeout ) ;
ast_manager_register2 ( " AbsoluteTimeout " , EVENT_FLAG_SYSTEM | EVENT_FLAG_CALL , action_timeout , " Set Absolute Timeout " , mandescr_timeout ) ;