From: Mike Rylander Date: Tue, 24 Mar 2015 20:22:16 +0000 (-0400) Subject: LP#1436047: Allow disabling of "bang commands" in srfsh X-Git-Tag: osrf_rel_2_4_1~9^2~2 X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=d9cbdfd1deb13932720ddffc7f01e976e8efaeda;p=OpenSRF.git LP#1436047: Allow disabling of "bang commands" in srfsh srfsh has the ability to execute commands via system() calls using the common "!command" syntax. This is very useful, but it would be nice to be able to turn that functionality off in some cases. This branch adds argument parsing to detect a new '--safe' command line parameter, which disables the "!command" syntax. Signed-off-by: Mike Rylander Signed-off-by: Galen Charlton --- diff --git a/src/srfsh/srfsh.c b/src/srfsh/srfsh.c index 956d62a..aed9536 100644 --- a/src/srfsh/srfsh.c +++ b/src/srfsh/srfsh.c @@ -95,6 +95,7 @@ static void close_all_sessions( void ); static int recv_timeout = 120; static int is_from_script = 0; +static int no_bang = 0; static osrfHash* server_hash = NULL; @@ -120,20 +121,31 @@ int main( int argc, char* argv[] ) { } if(argc > 1) { - /* for now.. the first arg is used as a script file for processing */ int f; - if( (f = open(argv[1], O_RDONLY)) == -1 ) { - osrfLogError( OSRF_LOG_MARK, "Unable to open file %s for reading, exiting...", argv[1]); - return -1; - } + int i; + for (i = 1; i < argc; i++) { - if(dup2(f, STDIN_FILENO) == -1) { - osrfLogError( OSRF_LOG_MARK, "Unable to duplicate STDIN, exiting..."); - return -1; - } + if( !strcmp( argv[i], "--safe" ) ) { + no_bang = 1; + continue; + } - close(f); - is_from_script = 1; + /* for now.. the first unrecognized arg is used as a script file for processing */ + if (is_from_script) continue; + + if( (f = open(argv[i], O_RDONLY)) == -1 ) { + osrfLogError( OSRF_LOG_MARK, "Unable to open file %s for reading, exiting...", argv[i]); + return -1; + } + + if(dup2(f, STDIN_FILENO) == -1) { + osrfLogError( OSRF_LOG_MARK, "Unable to duplicate STDIN, exiting..."); + return -1; + } + + close(f); + is_from_script = 1; + } } /* --------------------------------------------- */ @@ -364,7 +376,7 @@ static int process_request( const char* request ) { ret_val = handle_close( cmd_array ); else if ( request[0] == '!') { - system( request + 1 ); + if (!no_bang) system( request + 1 ); ret_val = 1; }