diff --git a/nova/compute/api.py b/nova/compute/api.py index a317c447fb7a..8309fbbb2e45 100644 --- a/nova/compute/api.py +++ b/nova/compute/api.py @@ -1561,12 +1561,14 @@ class API(BaseAPI): return {'url': connect_info['access_url']} @wrap_check_policy - def validate_vnc_console(self, context, instance_id, host, port): + def validate_vnc_console(self, context, instance_id, host, port, + console_type): """Validate VNC Console for an instance.""" instance = self.get(context, instance_id) output = self._call_compute_message('get_vnc_console', - context, - instance) + context, + instance, + params={"console_type": console_type}) return (port == output['port'] and host == output['host']) @wrap_check_policy diff --git a/nova/consoleauth/manager.py b/nova/consoleauth/manager.py index 5690ef32717f..507bdc5491db 100644 --- a/nova/consoleauth/manager.py +++ b/nova/consoleauth/manager.py @@ -84,14 +84,15 @@ class ConsoleAuthManager(manager.Manager): LOG.audit(_("Received Token: %(token)s, %(token_dict)s)"), locals()) - def _validate_console(self, token): + def _validate_console(self, context, token): console_valid = False token_dict = self.tokens[token] try: console_valid = self.compute_api.validate_vnc_console(context, - token_dict['instance_uuid'], + token_dict['instance_id'], token_dict['host'], - token_dict['port']) + token_dict['port'], + token_dict['console_type']) except exception.InstanceNotFound: pass return console_valid @@ -99,7 +100,7 @@ class ConsoleAuthManager(manager.Manager): def check_token(self, context, token): token_valid = token in self.tokens LOG.audit(_("Checking Token: %(token)s, %(token_valid)s)"), locals()) - if token_valid and self._validate_console(token): + if token_valid and self._validate_console(context, token): return self.tokens[token] def delete_tokens_for_instance(self, context, instance_id): diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py index 7bd6fcd3a1c1..bff08a40d079 100644 --- a/nova/tests/test_compute.py +++ b/nova/tests/test_compute.py @@ -767,7 +767,8 @@ class ComputeTestCase(BaseTestCase): console_valid = self.compute_api.validate_vnc_console(self.context, instance['uuid'], 'myhost', - '5900') + '5900', + 'novnc') self.assertTrue(console_valid) self.compute.terminate_instance(self.context, instance['uuid']) @@ -783,7 +784,8 @@ class ComputeTestCase(BaseTestCase): console_valid = self.compute_api.validate_vnc_console(self.context, instance['uuid'], 'myhost', - '5900') + '5900', + 'novnc') self.assertFalse(console_valid) self.compute.terminate_instance(self.context, instance['uuid']) @@ -793,7 +795,7 @@ class ComputeTestCase(BaseTestCase): self.compute.run_instance(self.context, instance['uuid']) self.assertRaises(exception.InstanceNotFound, self.compute_api.validate_vnc_console, - self.context, 5555, 'myhost', '5900') + self.context, 5555, 'myhost', '5900', 'novnc') self.compute.terminate_instance(self.context, instance['uuid']) def test_xvpvnc_vnc_console(self):