mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-10 20:26:48 +00:00
fix(instances): a new VM and each clone get a VNC password of their own
Since the VM create became a job (6f0c7300) every new VM was defined with
no VNC password, and a clone copied its source's password (or its lack
of one) exactly: every clone of a template shared it. Computes listen
for VNC on all their addresses (dev/libvirt-bootstrap.sh), so anyone who
could reach a compute's VNC ports opened any of these consoles directly,
without the panel; the README's firewall rule was the only guard.
The create job asks for create.py's random 8-character password again,
and a clone's VNC graphics get a new random one. The console page sends
the password to a user with passwordless_console, which the user create
form now ticks by default next to change_password; a user without it is
asked for the password, as the permission intends. Existing VMs keep
their settings.
Live create, clone and VM page tests pass on a TCP compute.
This commit is contained in:
parent
c5d0672c68
commit
1f9347e148
7 changed files with 47 additions and 3 deletions
|
|
@ -884,7 +884,7 @@ class CreateInstance(Kind):
|
|||
nwfilter=data["nwfilter"],
|
||||
net_model="virtio" if data["net_model"] == "default" else data["net_model"],
|
||||
video=data["video"],
|
||||
console_pass="",
|
||||
console_pass="random", # without one, anyone reaching the VNC port is in
|
||||
mac=data["mac"],
|
||||
qemu_ga=data["qemu_ga"],
|
||||
add_cdrom=data["add_cdrom"],
|
||||
|
|
|
|||
|
|
@ -48,6 +48,8 @@ class CreateJobTestCase(TransactionTestCase):
|
|||
op.refresh_from_db()
|
||||
CreateInstance().run(op, Context(op, SimpleNamespace(identity="wvc-test:1:a")))
|
||||
self.assertEqual(self.conn.create_instance.call_args.kwargs["uuid"], op.intent["uuid"])
|
||||
# a console password of its own: without one, anyone reaching the VNC port is in
|
||||
self.assertEqual(self.conn.create_instance.call_args.kwargs["console_pass"], "random")
|
||||
self.assertTrue(Instance.objects.filter(uuid=op.intent["uuid"], name="api-vm").exists())
|
||||
|
||||
def test_the_api_takes_secure_boot_and_a_tpm(self):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue