diff --git a/warden_server/README b/warden_server/README index c0fdca8b62fb52106e42cb911f6cb735e833fe2e..6c7c86660366923db21eb17c2764f645f335aae4 100644 --- a/warden_server/README +++ b/warden_server/README @@ -257,7 +257,7 @@ warden_server.py register [--help] -n NAME -h HOSTNAME -r REQUESTOR [-s SECRET] [--note NOTE] [--valid | --novalid] [--read | --noread] [--nowrite | --write] [--nodebug | --debug] - [--test | --notest] + [--nomanage | --manage] [--test | --notest] Add new client registration entry. @@ -279,6 +279,8 @@ warden_server.py register [--help] -n NAME -h HOSTNAME -r REQUESTOR --write --nodebug client is allowed receive debug output (default - no) --debug + --nomanage client is allowed to manage other clients (default - no) + --manage --test client is yet in testing phase (default - yes) --notest @@ -287,7 +289,7 @@ warden_server.py modify [--help] -i ID [-n NAME] [-h HOSTNAME] [-r REQUESTOR] [-s SECRET] [--note NOTE] [--valid | --novalid] [--read | --noread] [--nowrite | --write] [--nodebug | --debug] - [--test | --notest] + [--nomanage | --manage] [--test | --notest] Modify details of client registration entry. diff --git a/warden_server/test_warden_server.py b/warden_server/test_warden_server.py index e1d0ff3968d44d843b6d5c0c270def42cfc97080..6d965b551404c0a07dd6a05b243d49a77558a8d8 100755 --- a/warden_server/test_warden_server.py +++ b/warden_server/test_warden_server.py @@ -315,69 +315,73 @@ class WScliTest(unittest.TestCase): """Tests the client registration and its modification""" tests = [ (['register', '-n', 'cz.cesnet.warden.test2', '-h', 'test2.warden.cesnet.cz', '-r', 'warden-info@cesnet.cz'], 0, - (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 1, 0, 0, 1, None),)), + (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 1, 0, 0, 1, 0, None),)), (['modify', '-i', 'CLIENT_ID', '--novalid'], 0, - (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 0, 1, 0, 0, 1, None),)), + (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 0, 1, 0, 0, 1, 0, None),)), (['modify', '-i', 'CLIENT_ID', '--valid'], 0, - (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 1, 0, 0, 1, None),)), + (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 1, 0, 0, 1, 0, None),)), (['modify', '-i', 'CLIENT_ID', '--valid', '--novalid'], 2, - (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 1, 0, 0, 1, None),)), + (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 1, 0, 0, 1, 0, None),)), (['modify', '-i', 'CLIENT_ID', '--read'], 0, - (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 1, 0, 0, 1, None),)), + (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 1, 0, 0, 1, 0, None),)), (['modify', '-i', 'CLIENT_ID', '--noread', '--write'], 0, - (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 0, 0, 1, 1, None),)), + (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 0, 0, 1, 1, 0, None),)), (['modify', '-i', 'CLIENT_ID', '--debug', '--read'], 0, - (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 1, 1, 1, 1, None),)), + (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 1, 1, 1, 1, 0, None),)), (['modify', '-i', 'CLIENT_ID', '--notest', '--nodebug'], 0, - (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 1, 0, 1, 0, None),)), + (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '--notest', '--nodebug'], 2, - (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 1, 0, 1, 0, None),)), + (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', '1000', '--notest', '--nodebug'], 251, - (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 1, 0, 1, 0, None),)), + (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test2', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-n', 'cz.cesnet.warden.test3'], 0, - (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-n', '..'], 254, - (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('warden-info@cesnet.cz', 'test2.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-h', 'test3.warden.cesnet.cz'], 0, - (('warden-info@cesnet.cz', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('warden-info@cesnet.cz', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-h', ''.zfill(256)], 253, - (('warden-info@cesnet.cz', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('warden-info@cesnet.cz', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-h', '..'], 253, - (('warden-info@cesnet.cz', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('warden-info@cesnet.cz', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-r', 'warden-info@cesnet.cz, info@cesnet.cz'], 0, - (('warden-info@cesnet.cz, info@cesnet.cz', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('warden-info@cesnet.cz, info@cesnet.cz', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-r', 'warden-info@cesnet.cz ,info@cesnet.cz'], 0, - (('warden-info@cesnet.cz ,info@cesnet.cz', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('warden-info@cesnet.cz ,info@cesnet.cz', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-r', 'Warden Info <warden-info@cesnet.cz>'], 0, - (('Warden Info <warden-info@cesnet.cz>', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('Warden Info <warden-info@cesnet.cz>', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-r', 'Other Info <other-info@x.cz'], 252, - (('Warden Info <warden-info@cesnet.cz>', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('Warden Info <warden-info@cesnet.cz>', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-r', 'Other other@x.cz'], 252, - (('Warden Info <warden-info@cesnet.cz>', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('Warden Info <warden-info@cesnet.cz>', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-r', 'a@b, '], 252, - (('Warden Info <warden-info@cesnet.cz>', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('Warden Info <warden-info@cesnet.cz>', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-r', 'a@b'], 0, - (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-r', '@'], 252, - (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-r', 'abc'], 252, - (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-r', 'a@b@c'], 252, - (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-n', 'cz.cesnet.warden.test3'], 250, - (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-s', 'abc'], 249, - (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, None),)), + (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', None, 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-s', 'top_secret'], 0, - (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', 'top_secret', 1, 1, 0, 1, 0, None),)), + (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', 'top_secret', 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '-s', 'top_secret'], 249, - (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', 'top_secret', 1, 1, 0, 1, 0, None),)), + (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', 'top_secret', 1, 1, 0, 1, 0, 0, None),)), (['modify', '-i', 'CLIENT_ID', '--note', ''.zfill(1024)], 0, - (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', 'top_secret', 1, 1, 0, 1, 0, ''.zfill(1024)),)), + (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', 'top_secret', 1, 1, 0, 1, 0, 0, ''.zfill(1024)),)), (['modify', '-i', 'CLIENT_ID', '--note', 'Valid until: 18.01.2038'], 0, - (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', 'top_secret', 1, 1, 0, 1, 0, 'Valid until: 18.01.2038'),)), + (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', 'top_secret', 1, 1, 0, 1, 0, 0, 'Valid until: 18.01.2038'),)), (['modify', '-i', 'CLIENT_ID', '--note', 'Valid until:', '20.1.2038'], 2, - (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', 'top_secret', 1, 1, 0, 1, 0, 'Valid until: 18.01.2038'),)), + (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', 'top_secret', 1, 1, 0, 1, 0, 0, 'Valid until: 18.01.2038'),)), + (['modify', '-i', 'CLIENT_ID', '--manage'], 0, + (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', 'top_secret', 1, 1, 0, 1, 0, 1, 'Valid until: 18.01.2038'),)), + (['modify', '-i', 'CLIENT_ID', '--nomanage'], 0, + (('a@b', 'test3.warden.cesnet.cz', 'cz.cesnet.warden.test3', 'top_secret', 1, 1, 0, 1, 0, 0, 'Valid until: 18.01.2038'),)), ] client_id = None for supplied_arguments, expected_return, expected_sql_result in tests: @@ -396,7 +400,7 @@ class WScliTest(unittest.TestCase): class MySQL: name = "MySQL" reg_mod_test_query = "SELECT requestor, hostname, name, secret, valid, clients.read, " \ - "debug, clients.write, test, note FROM clients WHERE id = %s" + "debug, clients.write, test, manage, note FROM clients WHERE id = %s" def __init__(self, user=USER, password=PASSWORD, dbname=DB): import MySQLdb as my @@ -503,7 +507,7 @@ class MySQL: class PostgreSQL: name = "PostgreSQL" reg_mod_test_query = "SELECT requestor, hostname, name, secret, valid, clients.read, " \ - "debug, clients.write, test, note FROM clients WHERE id = %s" + "debug, clients.write, test, manage, note FROM clients WHERE id = %s" def __init__(self, user=USER, password=PASSWORD, dbname=DB): import psycopg2 as ppg diff --git a/warden_server/warden_server.py b/warden_server/warden_server.py index 3bfd0bb12f9c13edcfa68866971f0314f0ccfc68..ffe7ce3661240e507df4c5104180eecb75f789da 100755 --- a/warden_server/warden_server.py +++ b/warden_server/warden_server.py @@ -2057,6 +2057,7 @@ def register_client(**kwargs): if kwargs["write"] is None: kwargs["write"] = False if kwargs["debug"] is None: kwargs["debug"] = False if kwargs["test"] is None: kwargs["test"] = True + if kwargs["manage"] is None: kwargs["manage"] = False return modify_client(id=None, **kwargs) @@ -2183,6 +2184,12 @@ def add_client_args(subargp, mod=False): help="client is allowed receive debug output (default - no)") reg_debug.add_argument("--debug", action="store_const", const=True, default=None) + reg_manage = subargp.add_mutually_exclusive_group(required=False) + reg_manage.add_argument( + "--nomanage", action="store_const", const=False, dest="manage", default=None, + help="client is allowed to manage other clients (default - no)") + reg_manage.add_argument("--manage", action="store_const", const=True, default=None) + reg_test = subargp.add_mutually_exclusive_group(required=False) reg_test.add_argument( "--test", action="store_const", const=True, default=None,