Passed
Push — master ( bd8417...61b038 )
by
unknown
03:43 queued 01:23
created

gvm.protocols.gmpv7.Gmp.modify_scanner()   A

Complexity

Conditions 1

Size

Total Lines 4
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nop 6
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
# -*- coding: utf-8 -*-
2
# Copyright (C) 2018 Greenbone Networks GmbH
3
#
4
# SPDX-License-Identifier: GPL-3.0-or-later
5
#
6
# This program is free software: you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation, either version 3 of the License, or
9
# (at your option) any later version.
10
#
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
# GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License
17
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
"""
19
Module for communication with gvmd in Greenbone Management Protocol version 7
20
"""
21
import logging
22
23
from lxml import etree
24
25
from gvm.errors import InvalidArgument, RequiredArgument
26
from gvm.utils import get_version_string
27
from gvm.xml import _GmpCommandFactory as GmpCommandFactory, XmlCommand
28
29
from .base import GvmProtocol
30
31
logger = logging.getLogger(__name__)
32
33
PROTOCOL_VERSION = (7,)
34
35
FILTER_TYPES = [
36
    'agent',
37
    'alert',
38
    'asset',
39
    'config',
40
    'credential',
41
    'filter',
42
    'group',
43
    'note',
44
    'override',
45
    'permission',
46
    'port_list',
47
    'report',
48
    'report_format',
49
    'result',
50
    'role',
51
    'schedule',
52
    'secinfo',
53
    'tag',
54
    'target',
55
    'task',
56
    'user',
57
]
58
59
60
def _check_command_status(xml):
61
    """Check gmp response
62
63
    Look into the gmp response and check for the status in the root element
64
65
    Arguments:
66
        xml {string} -- XML-Source
67
68
    Returns:
69
        bool -- True if valid, otherwise False
70
    """
71
72
    if xml is 0 or xml is None:
73
        logger.error('XML Command is empty')
74
        return False
75
76
    try:
77
        parser = etree.XMLParser(encoding='utf-8', recover=True)
78
79
        root = etree.XML(xml, parser=parser)
80
        status = root.attrib['status']
81
        return status is not None and status[0] == '2'
82
83
    except etree.Error as e:
84
        logger.error('etree.XML(xml): %s', e)
85
        return False
86
87
88
class Gmp(GvmProtocol):
0 ignored issues
show
best-practice introduced by
Too many public methods (112/30)
Loading history...
89
    """Python interface for Greenbone Management Protocol
90
91
    This class implements the `Greenbone Management Protocol version 7`_
92
93
    Attributes:
94
        connection (:class:`gvm.connections.GvmConnection`): Connection to use
95
            to talk with the gvmd daemon. See :mod:`gvm.connections` for
96
            possible connection types.
97
        transform (`callable`_, optional): Optional transform callable to
98
            convert response data. After each request the callable gets passed
99
            the plain response data which can be used to check the data and/or
100
            conversion into different representaitions like a xml dom.
101
102
            See :mod:`gvm.transforms` for existing transforms.
103
104
    .. _Greenbone Management Protocol version 7:
105
        https://docs.greenbone.net/API/GMP/gmp-7.0.html
106
    .. _callable:
107
        https://docs.python.org/3.6/library/functions.html#callable
108
    """
109
110
    def __init__(self, connection, transform=None):
111
        super().__init__(connection, transform)
112
113
        # Is authenticated on gvmd
114
        self._authenticated = False
115
116
        # GMP Message Creator
117
        self._generator = GmpCommandFactory()
118
119
    @staticmethod
120
    def get_protocol_version():
121
        """Allow to determine the Greenbone Management Protocol version.
122
123
            Returns:
124
                str: Implemented version of the Greenbone Management Protocol
125
        """
126
        return get_version_string(PROTOCOL_VERSION)
127
128
    def is_authenticated(self):
129
        """Checks if the user is authenticated
130
131
        If the user is authenticated privilged GMP commands like get_tasks
132
        may be send to gvmd.
133
134
        Returns:
135
            bool: True if an authenticated connection to gvmd has been
136
            established.
137
        """
138
        return self._authenticated
139
140
    def authenticate(self, username, password):
141
        """Authenticate to gvmd.
142
143
        The generated authenticate command will be send to server.
144
        Afterwards the response is read, transformed and returned.
145
146
        Arguments:
147
            username (str): Username
148
            password (str): Password
149
150
        Returns:
151
            any, str by default: Transformed response from server.
152
        """
153
        cmd = self._generator.create_authenticate_command(
154
            username=username, password=password)
155
156
        self._send(cmd)
157
        response = self._read()
158
159
        if _check_command_status(response):
160
            self._authenticated = True
161
162
        return self._transform(response)
163
164
    def create_agent(self, installer, signature, name, comment='', copy='',
165
                     howto_install='', howto_use=''):
166
        cmd = self._generator.create_agent_command(
167
            installer, signature, name, comment, copy, howto_install,
168
            howto_use)
169
        return self.send_command(cmd)
170
171
    def create_alert(self, name, condition, event, method, filter_id='',
172
                     copy='', comment=''):
173
        cmd = self._generator.create_alert_command(name, condition, event,
174
                                                   method, filter_id, copy,
175
                                                   comment)
176
        return self.send_command(cmd)
177
178
    def create_asset(self, name, asset_type, comment=''):
179
        # TODO: Add the missing second method. Also the docs are not complete!
0 ignored issues
show
Coding Style introduced by
TODO and FIXME comments should generally be avoided.
Loading history...
180
        cmd = self._generator.create_asset_command(name, asset_type, comment)
181
        return self.send_command(cmd)
182
183
    def create_config(self, copy_id, name):
184
        cmd = self._generator.create_config_command(copy_id, name)
185
        return self.send_command(cmd)
186
187
    def create_credential(self, name, **kwargs):
188
        cmd = self._generator.create_credential_command(name, kwargs)
189
        return self.send_command(cmd)
190
191
    def create_filter(self, name, make_unique=False, filter_type=None,
192
                      comment=None, term=None, copy=None):
193
        """Create a new filter
194
195
        Arguments:
196
            name (str): Name of the new filter
197
            make_unique (boolean, optional):
198
            filter_type (str, optional): Filter for entity type
199
            comment (str, optional): Comment for the filter
200
            term (str, optional): Filter term e.g. 'name=foo'
201
            copy (str, optional): UUID of an existing filter
202
203
        Returns:
204
            The response. See :py:meth:`send_command` for details.
205
        """
206
        if not name:
207
            raise RequiredArgument('create_filter requires a name argument')
208
209
        cmd = XmlCommand('create_filter')
210
        _xmlname = cmd.add_element('name', name)
211
        if make_unique:
212
            _xmlname.add_element('make_unique', '1')
213
214
        if comment:
215
            cmd.add_element('comment', comment)
216
217
        # TODO: Move copy into an extra method
0 ignored issues
show
Coding Style introduced by
TODO and FIXME comments should generally be avoided.
Loading history...
218
        if copy:
219
            cmd.add_element('copy', copy)
220
221
        if term:
222
            cmd.add_element('term', term)
223
224
        if filter_type:
225
            filter_type = filter_type.lower()
226
            if filter_type not in FILTER_TYPES:
227
                raise InvalidArgument(
228
                    'create_filter requires type to be one of {0} but '
229
                    'was {1}'.format(', '.join(FILTER_TYPES), filter_type))
230
            cmd.add_element('type', filter_type)
231
232
        return self._send_xml_command(cmd)
233
234
    def create_group(self, name, **kwargs):
235
        cmd = self._generator.create_group_command(name, kwargs)
236
        return self.send_command(cmd)
237
238
    # TODO: Create notes with comment returns bogus element. Research
0 ignored issues
show
Coding Style introduced by
TODO and FIXME comments should generally be avoided.
Loading history...
239
    def create_note(self, text, nvt_oid, **kwargs):
240
        cmd = self._generator.create_note_command(text, nvt_oid, kwargs)
241
        return self.send_command(cmd)
242
243
    def create_override(self, text, nvt_oid, **kwargs):
244
        cmd = self._generator.create_override_command(text, nvt_oid, kwargs)
245
        return self.send_command(cmd)
246
247
    def create_permission(self, name, subject_id, permission_type, **kwargs):
248
        cmd = self._generator.create_permission_command(
249
            name, subject_id, permission_type, kwargs)
250
        return self.send_command(cmd)
251
252
    def create_port_list(self, name, port_range, **kwargs):
253
        cmd = self._generator.create_port_list_command(name, port_range, kwargs)
254
        return self.send_command(cmd)
255
256
    def create_port_range(self, port_list_id, start, end, port_range_type,
257
                          comment=''):
258
        cmd = self._generator.create_port_range_command(
259
            port_list_id, start, end, port_range_type, comment)
260
        return self.send_command(cmd)
261
262
    def create_report(self, report_xml_string, **kwargs):
263
        cmd = self._generator.create_report_command(report_xml_string, kwargs)
264
        return self.send_command(cmd)
265
266
    def create_role(self, name, **kwargs):
267
        cmd = self._generator.create_role_command(name, kwargs)
268
        return self.send_command(cmd)
269
270
    def create_scanner(self, name, host, port, scanner_type, ca_pub,
271
                       credential_id, **kwargs):
272
        cmd = self._generator.create_scanner_command(name, host, port,
273
                                                     scanner_type, ca_pub,
274
                                                     credential_id, kwargs)
275
        return self.send_command(cmd)
276
277
    def create_schedule(self, name, **kwargs):
278
        cmd = self._generator.create_schedule_command(name, kwargs)
279
        return self.send_command(cmd)
280
281
    def create_tag(self, name, resource_id, resource_type, **kwargs):
282
        cmd = self._generator.create_tag_command(name, resource_id,
283
                                                 resource_type, kwargs)
284
        return self.send_command(cmd)
285
286
    def create_target(self, name, make_unique=False, asset_hosts_filter=None,
0 ignored issues
show
best-practice introduced by
Too many arguments (18/15)
Loading history...
Comprehensibility introduced by
This function exceeds the maximum number of variables (22/15).
Loading history...
287
                      hosts=None, comment=None, copy=None, exclude_hosts=None,
288
                      ssh_credential_id=None, ssh_credential_port=None,
289
                      smb_credential_id=None, esxi_credential_id=None,
290
                      snmp_credential_id=None, alive_tests=None,
291
                      reverse_lookup_only=None, reverse_lookup_unify=None,
292
                      port_range=None, port_list_id=None):
293
        """Create a new target
294
295
        Arguments:
296
            name (str): Name of the target
297
            make_unique (boolean, optional): Append a unique suffix if the name
298
                already exists
299
            asset_hosts_filter (str, optional): Filter to select target host
300
                from assets hosts
301
            hosts (str, optional): Hosts to scan
302
            exclude_hosts (str, optional): Hosts to exclude from scan
303
            comment (str, optional): Comment for the target
304
            copy (str, optional): UUID of an existing target to clone from
305
            ssh_credential_id (str, optional): UUID of a ssh credential to use
306
                on target
307
            ssh_credential_port (str, optional): The port to use for ssh
308
                credential
309
            smb_credential_id (str, optional): UUID of a smb credential to use
310
                on target
311
            snmp_credential_id (str, optional): UUID of a snmp credential to use
312
                on target
313
            esxi_credential_id (str, optional): UUID of a esxi credential to use
314
                on target
315
            alive_tests (str, optional): Which alive tests to use
316
            reverse_lookup_only (boolean, optional): Whether to scan only hosts
317
                that have names
318
            reverse_lookup_unify (boolean, optional): Whether to scan only one
319
                IP when multiple IPs have the same name.
320
            port_range (str, optional): Port range for the target
321
            port_list_id (str, optional): UUID of the port list to use on target
322
323
        Returns:
324
            The response. See :py:meth:`send_command` for details.
325
        """
326
        if not name:
327
            raise RequiredArgument('create_target requires a name argument')
328
329
        cmd = XmlCommand('create_target')
330
        _xmlname = cmd.add_element('name', name)
331
        if make_unique:
332
            _xmlname.add_element('make_unique', '1')
333
334
        if asset_hosts_filter:
335
            cmd.add_element('asset_hosts',
336
                            attrs={'filter': str(asset_hosts_filter)})
337
        elif hosts:
338
            cmd.add_element('hosts', hosts)
339
        else:
340
            raise RequiredArgument('create_target requires either a hosts or '
341
                                   'an asset_hosts_filter argument')
342
343
        if comment:
344
            cmd.add_element('comment', comment)
345
346
        if copy:
347
            # TODO move copy case into clone_target method
0 ignored issues
show
Coding Style introduced by
TODO and FIXME comments should generally be avoided.
Loading history...
348
349
            # NOTE: It seems that hosts/asset_hosts is silently ignored by the
350
            # server when copy is supplied. But for specification conformance
351
            # we raise the ValueError above and consider copy optional.
352
            cmd.add_element('copy', copy)
353
354
        if exclude_hosts:
355
            cmd.add_element('exclude_hosts', exclude_hosts)
356
357
        if ssh_credential_id:
358
            _xmlssh = cmd.add_element('ssh_credential',
359
                                      attrs={'id': ssh_credential_id})
360
            if ssh_credential_port:
361
                _xmlssh.add_element('port', ssh_credential_port)
362
363
        if smb_credential_id:
364
            cmd.add_element('smb_credential', attrs={'id': smb_credential_id})
365
366
        if esxi_credential_id:
367
            cmd.add_element('esxi_credential', attrs={'id': esxi_credential_id})
368
369
        if snmp_credential_id:
370
            cmd.add_element('snmp_credential', attrs={'id': snmp_credential_id})
371
372
        if alive_tests:
373
            cmd.add_element('alive_tests', alive_tests)
374
375
        if not reverse_lookup_only is None:
376
            if reverse_lookup_only:
377
                cmd.add_element('reverse_lookup_only', '1')
378
            else:
379
                cmd.add_element('reverse_lookup_only', '0')
380
381
        if not reverse_lookup_unify is None:
382
            if reverse_lookup_unify:
383
                cmd.add_element('reverse_lookup_unify', '1')
384
            else:
385
                cmd.add_element('reverse_lookup_unify', '0')
386
387
        if port_range:
388
            cmd.add_element('port_range', port_range)
389
390
        if port_list_id:
391
            cmd.add_element('port_list', attrs={'id': port_list_id})
392
393
        return self._send_xml_command(cmd)
394
395
    def create_task(self, name, config_id, target_id, scanner_id,
396
                    alert_ids=None, comment=''):
397
        if alert_ids is None:
398
            alert_ids = []
399
        cmd = self._generator.create_task_command(
400
            name, config_id, target_id, scanner_id, alert_ids, comment)
401
        return self.send_command(cmd)
402
403
    def create_user(self, name, password, copy='', hosts_allow='0',
404
                    ifaces_allow='0', role_ids=(), hosts=None, ifaces=None):
405
        cmd = self._generator.create_user_command(
406
            name, password, copy, hosts_allow, ifaces_allow, role_ids, hosts,
407
            ifaces)
408
        return self.send_command(cmd)
409
410
    def delete_agent(self, **kwargs):
411
        cmd = self._generator.delete_agent_command(kwargs)
412
        return self.send_command(cmd)
413
414
    def delete_alert(self, **kwargs):
415
        cmd = self._generator.delete_alert_command(kwargs)
416
        return self.send_command(cmd)
417
418
    def delete_asset(self, asset_id, ultimate=0):
419
        cmd = self._generator.delete_asset_command(asset_id, ultimate)
420
        return self.send_command(cmd)
421
422
    def delete_config(self, config_id, ultimate=0):
423
        cmd = self._generator.delete_config_command(config_id, ultimate)
424
        return self.send_command(cmd)
425
426
    def delete_credential(self, credential_id, ultimate=0):
427
        cmd = self._generator.delete_credential_command(credential_id, ultimate)
428
        return self.send_command(cmd)
429
430
    def delete_filter(self, filter_id, ultimate=0):
431
        cmd = self._generator.delete_filter_command(filter_id, ultimate)
432
        return self.send_command(cmd)
433
434
    def delete_group(self, group_id, ultimate=0):
435
        cmd = self._generator.delete_group_command(group_id, ultimate)
436
        return self.send_command(cmd)
437
438
    def delete_note(self, note_id, ultimate=0):
439
        cmd = self._generator.delete_note_command(note_id, ultimate)
440
        return self.send_command(cmd)
441
442
    def delete_override(self, override_id, ultimate=0):
443
        cmd = self._generator.delete_override_command(override_id, ultimate)
444
        return self.send_command(cmd)
445
446
    def delete_permission(self, permission_id, ultimate=0):
447
        cmd = self._generator.delete_permission_command(permission_id, ultimate)
448
        return self.send_command(cmd)
449
450
    def delete_port_list(self, port_list_id, ultimate=0):
451
        cmd = self._generator.delete_port_list_command(port_list_id, ultimate)
452
        return self.send_command(cmd)
453
454
    def delete_port_range(self, port_range_id):
455
        cmd = self._generator.delete_port_range_command(port_range_id)
456
        return self.send_command(cmd)
457
458
    def delete_report(self, report_id):
459
        cmd = self._generator.delete_report_command(report_id)
460
        return self.send_command(cmd)
461
462
    def delete_report_format(self, report_format_id, ultimate=0):
463
        cmd = self._generator.delete_report_format_command(
464
            report_format_id, ultimate)
465
        return self.send_command(cmd)
466
467
    def delete_role(self, role_id, ultimate=0):
468
        cmd = self._generator.delete_role_command(role_id, ultimate)
469
        return self.send_command(cmd)
470
471
    def delete_scanner(self, scanner_id, ultimate=0):
472
        cmd = self._generator.delete_scanner_command(scanner_id, ultimate)
473
        return self.send_command(cmd)
474
475
    def delete_schedule(self, schedule_id, ultimate=0):
476
        cmd = self._generator.delete_schedule_command(schedule_id, ultimate)
477
        return self.send_command(cmd)
478
479
    def delete_tag(self, tag_id, ultimate=0):
480
        cmd = self._generator.delete_tag_command(tag_id, ultimate)
481
        return self.send_command(cmd)
482
483
    def delete_target(self, target_id, ultimate=0):
484
        cmd = self._generator.delete_target_command(target_id, ultimate)
485
        return self.send_command(cmd)
486
487
    def delete_task(self, task_id, ultimate=0):
488
        cmd = self._generator.delete_task_command(task_id, ultimate)
489
        return self.send_command(cmd)
490
491
    def delete_user(self, **kwargs):
492
        cmd = self._generator.delete_user_command(kwargs)
493
        return self.send_command(cmd)
494
495
    def describe_auth(self):
496
        cmd = self._generator.describe_auth_command()
497
        return self.send_command(cmd)
498
499
    def empty_trashcan(self):
500
        cmd = self._generator.empty_trashcan_command()
501
        return self.send_command(cmd)
502
503
    def get_agents(self, **kwargs):
504
        cmd = self._generator.get_agents_command(kwargs)
505
        return self.send_command(cmd)
506
507
    def get_aggregates(self, **kwargs):
508
        cmd = self._generator.get_aggregates_command(kwargs)
509
        return self.send_command(cmd)
510
511
    def get_alerts(self, **kwargs):
512
        cmd = self._generator.get_alerts_command(kwargs)
513
        return self.send_command(cmd)
514
515
    def get_assets(self, **kwargs):
516
        cmd = self._generator.get_assets_command(kwargs)
517
        return self.send_command(cmd)
518
519
    def get_credentials(self, **kwargs):
520
        cmd = self._generator.get_credentials_command(kwargs)
521
        return self.send_command(cmd)
522
523
    def get_configs(self, **kwargs):
524
        cmd = self._generator.get_configs_command(kwargs)
525
        return self.send_command(cmd)
526
527
    def get_feeds(self, **kwargs):
528
        cmd = self._generator.get_feeds_command(kwargs)
529
        return self.send_command(cmd)
530
531
    def get_filters(self, **kwargs):
532
        cmd = self._generator.get_filters_command(kwargs)
533
        return self.send_command(cmd)
534
535
    def get_groups(self, **kwargs):
536
        cmd = self._generator.get_groups_command(kwargs)
537
        return self.send_command(cmd)
538
539
    def get_info(self, **kwargs):
540
        cmd = self._generator.get_info_command(kwargs)
541
        return self.send_command(cmd)
542
543
    def get_notes(self, **kwargs):
544
        cmd = self._generator.get_notes_command(kwargs)
545
        return self.send_command(cmd)
546
547
    def get_nvts(self, **kwargs):
548
        cmd = self._generator.get_nvts_command(kwargs)
549
        return self.send_command(cmd)
550
551
    def get_nvt_families(self, **kwargs):
552
        cmd = self._generator.get_nvt_families_command(kwargs)
553
        return self.send_command(cmd)
554
555
    def get_overrides(self, **kwargs):
556
        cmd = self._generator.get_overrides_command(kwargs)
557
        return self.send_command(cmd)
558
559
    def get_permissions(self, **kwargs):
560
        cmd = self._generator.get_permissions_command(kwargs)
561
        return self.send_command(cmd)
562
563
    def get_port_lists(self, **kwargs):
564
        cmd = self._generator.get_port_lists_command(kwargs)
565
        return self.send_command(cmd)
566
567
    def get_preferences(self, **kwargs):
568
        cmd = self._generator.get_preferences_command(kwargs)
569
        return self.send_command(cmd)
570
571
    def get_reports(self, **kwargs):
572
        cmd = self._generator.get_reports_command(kwargs)
573
        return self.send_command(cmd)
574
575
    def get_report_formats(self, **kwargs):
576
        cmd = self._generator.get_report_formats_command(kwargs)
577
        return self.send_command(cmd)
578
579
    def get_results(self, **kwargs):
580
        cmd = self._generator.get_results_command(kwargs)
581
        return self.send_command(cmd)
582
583
    def get_roles(self, **kwargs):
584
        cmd = self._generator.get_roles_command(kwargs)
585
        return self.send_command(cmd)
586
587
    def get_scanners(self, **kwargs):
588
        cmd = self._generator.get_scanners_command(kwargs)
589
        return self.send_command(cmd)
590
591
    def get_schedules(self, **kwargs):
592
        cmd = self._generator.get_schedules_command(kwargs)
593
        return self.send_command(cmd)
594
595
    def get_settings(self, **kwargs):
596
        cmd = self._generator.get_settings_command(kwargs)
597
        return self.send_command(cmd)
598
599
    def get_system_reports(self, **kwargs):
600
        cmd = self._generator.get_system_reports_command(kwargs)
601
        return self.send_command(cmd)
602
603
    def get_tags(self, **kwargs):
604
        cmd = self._generator.get_tags_command(kwargs)
605
        return self.send_command(cmd)
606
607
    def get_targets(self, **kwargs):
608
        cmd = self._generator.get_targets_command(kwargs)
609
        return self.send_command(cmd)
610
611
    def get_tasks(self, **kwargs):
612
        cmd = self._generator.get_tasks_command(kwargs)
613
        return self.send_command(cmd)
614
615
    def get_users(self, **kwargs):
616
        cmd = self._generator.get_users_command(kwargs)
617
        return self.send_command(cmd)
618
619
    def get_version(self):
620
        cmd = self._generator.get_version_command()
621
        return self.send_command(cmd)
622
623
    def help(self, **kwargs):
624
        cmd = self._generator.help_command(kwargs)
625
        return self.send_command(cmd)
626
627
    def modify_agent(self, agent_id, name='', comment=''):
628
        cmd = self._generator.modify_agent_command(agent_id, name, comment)
629
        return self.send_command(cmd)
630
631
    def modify_alert(self, alert_id, **kwargs):
632
        cmd = self._generator.modify_alert_command(alert_id, kwargs)
633
        return self.send_command(cmd)
634
635
    def modify_asset(self, asset_id, comment):
636
        cmd = self._generator.modify_asset_command(asset_id, comment)
637
        return self.send_command(cmd)
638
639
    def modify_auth(self, group_name, auth_conf_settings):
640
        cmd = self._generator.modify_auth_command(group_name,
641
                                                  auth_conf_settings)
642
        return self.send_command(cmd)
643
644
    def modify_config(self, selection, **kwargs):
645
        cmd = self._generator.modify_config_command(selection, kwargs)
646
        return self.send_command(cmd)
647
648
    def modify_credential(self, credential_id, **kwargs):
649
        cmd = self._generator.modify_credential_command(
650
            credential_id, kwargs)
651
        return self.send_command(cmd)
652
653
    def modify_filter(self, filter_id, **kwargs):
654
        cmd = self._generator.modify_filter_command(filter_id, kwargs)
655
        return self.send_command(cmd)
656
657
    def modify_group(self, group_id, **kwargs):
658
        cmd = self._generator.modify_group_command(group_id, kwargs)
659
        return self.send_command(cmd)
660
661
    def modify_note(self, note_id, text, **kwargs):
662
        cmd = self._generator.modify_note_command(note_id, text, kwargs)
663
        return self.send_command(cmd)
664
665
    def modify_override(self, override_id, text, **kwargs):
666
        cmd = self._generator.modify_override_command(override_id, text,
667
                                                      kwargs)
668
        return self.send_command(cmd)
669
670
    def modify_permission(self, permission_id, **kwargs):
671
        cmd = self._generator.modify_permission_command(
672
            permission_id, kwargs)
673
        return self.send_command(cmd)
674
675
    def modify_port_list(self, port_list_id, **kwargs):
676
        cmd = self._generator.modify_port_list_command(port_list_id, kwargs)
677
        return self.send_command(cmd)
678
679
    def modify_report(self, report_id, comment):
680
        cmd = self._generator.modify_report_format_command(report_id, comment)
681
        return self.send_command(cmd)
682
683
    def modify_report_format(self, report_format_id, **kwargs):
684
        cmd = self._generator.modify_report_format_command(report_format_id,
685
                                                           kwargs)
686
        return self.send_command(cmd)
687
688
    def modify_role(self, role_id, **kwargs):
689
        cmd = self._generator.modify_role_command(role_id, kwargs)
690
        return self.send_command(cmd)
691
692
    def modify_scanner(self, scanner_id, host, port, scanner_type, **kwargs):
693
        cmd = self._generator.modify_scanner_command(scanner_id, host, port,
694
                                                     scanner_type, kwargs)
695
        return self.send_command(cmd)
696
697
    def modify_schedule(self, schedule_id, **kwargs):
698
        cmd = self._generator.modify_schedule_command(schedule_id, kwargs)
699
        return self.send_command(cmd)
700
701
    def modify_setting(self, setting_id, name, value):
702
        cmd = self._generator.modify_setting_command(setting_id, name, value)
703
        return self.send_command(cmd)
704
705
    def modify_tag(self, tag_id, **kwargs):
706
        cmd = self._generator.modify_tag_command(tag_id, kwargs)
707
        return self.send_command(cmd)
708
709
    def modify_target(self, target_id, **kwargs):
710
        cmd = self._generator.modify_target_command(target_id, kwargs)
711
        return self.send_command(cmd)
712
713
    def modify_task(self, task_id, **kwargs):
714
        cmd = self._generator.modify_task_command(task_id, kwargs)
715
        return self.send_command(cmd)
716
717
    def modify_user(self, **kwargs):
718
        cmd = self._generator.modify_user_command(kwargs)
719
        return self.send_command(cmd)
720
721
    def move_task(self, task_id, slave_id):
722
        cmd = self._generator.move_task_command(task_id, slave_id)
723
        return self.send_command(cmd)
724
725
    def restore(self, entity_id):
726
        cmd = self._generator.restore_command(entity_id)
727
        return self.send_command(cmd)
728
729
    def resume_task(self, task_id):
730
        cmd = self._generator.resume_task_command(task_id)
731
        return self.send_command(cmd)
732
733
    def start_task(self, task_id):
734
        cmd = self._generator.start_task_command(task_id)
735
        return self.send_command(cmd)
736
737
    def stop_task(self, task_id):
738
        cmd = self._generator.stop_task_command(task_id)
739
        return self.send_command(cmd)
740
741
    def sync_cert(self):
742
        cmd = self._generator.sync_cert_command()
743
        return self.send_command(cmd)
744
745
    def sync_config(self):
746
        cmd = self._generator.sync_config_command()
747
        return self.send_command(cmd)
748
749
    def sync_feed(self):
750
        cmd = self._generator.sync_feed_command()
751
        return self.send_command(cmd)
752
753
    def sync_scap(self):
754
        cmd = self._generator.sync_scap_command()
755
        return self.send_command(cmd)
756
757
    def test_alert(self, alert_id):
758
        cmd = self._generator.test_alert_command(alert_id)
759
        return self.send_command(cmd)
760
761
    def verify_agent(self, agent_id):
762
        cmd = self._generator.verify_agent_command(agent_id)
763
        return self.send_command(cmd)
764
765
    def verify_report_format(self, report_format_id):
766
        cmd = self._generator.verify_report_format_command(report_format_id)
767
        return self.send_command(cmd)
768
769
    def verify_scanner(self, scanner_id):
770
        cmd = self._generator.verify_scanner_command(scanner_id)
771
        return self.send_command(cmd)
772