Esempio n. 1
0
    def test_authenticate(self):
        mock_gmp = self.create_gmp_mock(False)

        return_value = authenticate(mock_gmp,
                                    username='******',
                                    password='******')

        self.assertTrue(isinstance(return_value, tuple))
        self.assertEqual(return_value[0], 'user')
        self.assertEqual(return_value[1], 'password')
Esempio n. 2
0
    def test_authenticate_username_is_none(
        self, mock_input
    ):  # pylint: disable=unused-argument,line-too-long
        mock_gmp = self.create_gmp_mock(False)

        return_value = authenticate(mock_gmp, password='******')

        self.assertTrue(isinstance(return_value, tuple))
        self.assertEqual(return_value[0], 'foo')
        self.assertEqual(return_value[1], 'bar')
Esempio n. 3
0
def main():
    do_not_run_as_root()

    parser = create_parser(description=HELP_TEXT, logfilename='gvm-cli.log')

    parser.add_protocol_argument()

    parser.add_argument('-X', '--xml', help='XML request to send')
    parser.add_argument('-r',
                        '--raw',
                        help='Return raw XML',
                        action='store_true',
                        default=False)
    parser.add_argument(
        '--pretty',
        help='Pretty format the returned xml',
        action='store_true',
        default=False,
    )
    parser.add_argument('--duration',
                        action='store_true',
                        help='Measure command execution time')
    parser.add_argument('infile',
                        nargs='?',
                        help='File to read XML commands from.')

    args = parser.parse_args()

    # If timeout value is -1, then the socket has no timeout for this session
    if args.timeout == -1:
        args.timeout = None

    if args.xml is not None:
        xml = args.xml
    else:
        try:
            xml = _load_infile(args.infile)
        except IOError as e:
            print(e, file=sys.stderr)
            sys.exit(1)

    # If no command was given, program asks for one
    if len(xml) == 0:
        xml = input()

    try:
        validate_xml_string(xml)
    except GvmError as e:
        print(e, file=sys.stderr)
        sys.exit(1)

    connection = create_connection(**vars(args))

    if args.raw:
        transform = None
    else:
        transform = CheckCommandTransform()

    if args.protocol == PROTOCOL_OSP:
        protocol_class = Osp
    else:
        protocol_class = Gmp

    try:
        with protocol_class(connection, transform=transform) as protocol:

            if args.protocol == PROTOCOL_GMP:
                # Ask for password if none are given
                authenticate(protocol, args.gmp_username, args.gmp_password)

            if args.duration:
                starttime = time.time()

            result = protocol.send_command(xml)

            if args.duration:
                duration = time.time() - starttime
                print(f'Elapsed time: {duration} seconds')
            elif args.pretty:
                pretty_print(result)
            else:
                print(result)

    except Exception as e:  # pylint: disable=broad-except
        logger.error(e)
        sys.exit(1)
    sys.exit(0)
Esempio n. 4
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)
Esempio n. 5
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)
Esempio n. 6
0
def main():
    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)')
    parser.add_argument('scriptargs',
                        nargs='*',
                        metavar="ARG",
                        help='Arguments for preloaded 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 = {
        'help': Help(),
        '__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)

    shell_args = Arguments(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:
        script_name = args.scriptname
        load(script_name, global_vars)

        if not only_script:
            enter_interactive_mode(global_vars)

    protocol.disconnect()
Esempio n. 7
0
    def test_authenticate_already_authenticated(self):
        mock_gmp = self.create_gmp_mock(True)

        self.assertIsNone(authenticate(mock_gmp))
Esempio n. 8
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)