Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)