def test_run_script(self, mock_exec, mock_open): path = 'foo' global_vars = ['OpenVAS', 'is', 'awesome'] mock_open().read.return_value = 'file content' run_script(path, global_vars) mock_open.assert_called_with(path, 'r', newline='') mock_exec.assert_called_with('file content', global_vars)
def test_run_script_file_not_found(self, mock_print, mock_open): def my_open(path, mode, newline): raise FileNotFoundError mock_open.side_effect = my_open path = 'foo' global_vars = ['OpenVAS', 'is', 'awesome'] with self.assertRaises(SystemExit): run_script(path, global_vars) mock_print.assert_called_with( 'Script {path} does not exist'.format(path=path), file=sys.stderr)
def main(): do_not_run_as_root() parser = create_parser(description=HELP_TEXT, logfilename='gvm-pyshell.log') parser.add_protocol_argument() parser.add_argument( '-i', '--interactive', action='store_true', default=False, help='Start an interactive Python shell', ) parser.add_argument( 'scriptname', nargs='?', metavar="SCRIPT", help='Path to script to be preloaded (example: myscript.gmp.py)', ) parser.add_argument( 'scriptargs', nargs='*', metavar="ARG", help='Arguments for preloaded script', ) args = parser.parse_args() connection = create_connection(**vars(args)) transform = EtreeCheckCommandTransform() global_vars = { 'help': Help(), '__version__': __version__, '__api_version__': __api_version__, } username = None password = None if args.protocol == PROTOCOL_OSP: protocol_class = Osp name = 'osp' else: protocol_class = Gmp name = 'gmp' with protocol_class(connection, transform=transform) as protocol: global_vars[name] = protocol global_vars['__name__'] = '__{}__'.format(name) if args.protocol == PROTOCOL_GMP: if args.gmp_username: (username, password) = authenticate( protocol, username=args.gmp_username, password=args.gmp_password, ) shell_args = Namespace(username=username, password=password) global_vars['args'] = shell_args with_script = args.scriptname and len(args.scriptname) > 0 if with_script: argv = [os.path.abspath(args.scriptname), *args.scriptargs] shell_args.argv = argv # for backwards compatibility we add script here shell_args.script = argv no_script_no_interactive = not args.interactive and not with_script script_and_interactive = args.interactive and with_script only_interactive = not with_script and args.interactive only_script = not args.interactive and with_script if only_interactive or no_script_no_interactive: enter_interactive_mode(global_vars) if script_and_interactive or only_script: if only_script: print( 'Using gvm-pyshell for running scripts only is deprecated. ' 'Please use gvm-script instead', file=sys.stderr, ) script_name = args.scriptname run_script(script_name, global_vars) if not only_script: enter_interactive_mode(global_vars)
def main(): parser = create_parser(description=HELP_TEXT, logfilename='gvm-script.log') parser.add_protocol_argument() parser.add_argument( 'scriptname', metavar="SCRIPT", help='Path to script to be executed (example: myscript.gmp)', ) parser.add_argument('scriptargs', nargs='*', metavar="ARG", help='Arguments for the script') args = parser.parse_args() if 'socket' in args.connection_type and args.sockpath: print( 'The --sockpath parameter has been deprecated. Please use ' '--socketpath instead', file=sys.stderr, ) connection = create_connection(**vars(args)) transform = EtreeCheckCommandTransform() global_vars = { '__version__': __version__, '__api_version__': __api_version__, } username = None password = None if args.protocol == PROTOCOL_OSP: protocol = Osp(connection, transform=transform) global_vars['osp'] = protocol global_vars['__name__'] = '__osp__' else: protocol = Gmp(connection, transform=transform) global_vars['gmp'] = protocol global_vars['__name__'] = '__gmp__' if args.gmp_username: (username, password) = authenticate(protocol, username=args.gmp_username, password=args.gmp_password) argv = [os.path.abspath(args.scriptname), *args.scriptargs] shell_args = Namespace( username=username, password=password, argv=argv, # for backwards compatibility we add script here script=argv, ) global_vars['args'] = shell_args run_script(args.scriptname, global_vars)
def main(): do_not_run_as_root() parser = create_parser(description=HELP_TEXT, logfilename='gvm-script.log') parser.add_protocol_argument() parser.add_argument( 'scriptname', metavar="SCRIPT", help='Path to script to be executed (example: myscript.gmp.py)', ) parser.add_argument('scriptargs', nargs='*', metavar="ARG", help='Arguments for the script') args, script_args = parser.parse_known_args() connection = create_connection(**vars(args)) transform = EtreeCheckCommandTransform() global_vars = { '__version__': __version__, '__api_version__': __api_version__, } username = None password = None if args.protocol == PROTOCOL_OSP: protocol_class = Osp name = 'osp' else: protocol_class = Gmp name = 'gmp' try: with protocol_class(connection, transform=transform) as protocol: global_vars[name] = protocol global_vars['__name__'] = f'__{name}__' if args.protocol == PROTOCOL_GMP: if args.gmp_username: (username, password) = authenticate( protocol, username=args.gmp_username, password=args.gmp_password, ) argv = [os.path.abspath(args.scriptname), *args.scriptargs] shell_args = Namespace( username=username, password=password, argv=argv, # for backwards compatibility we add script here script=argv, # the unknown args, which are owned by the script. script_args=script_args, ) global_vars['args'] = shell_args run_script(args.scriptname, global_vars) except Exception as e: # pylint: disable=broad-except print(e, file=sys.stderr) sys.exit(1) sys.exit(0)