1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
import logging
def host_does_not_have_user(ctx, username=None):
assert_ne = globals()["assert_ne"]
qemu = ctx["qemu"]
output, exit = qemu.ssh(["getent", "passwd", username])
assert_ne(exit, 0)
def host_has_user(ctx, username=None):
assert_eq = globals()["assert_eq"]
qemu = ctx["qemu"]
output, exit = qemu.ssh(["getent", "passwd", username])
assert_eq(exit, 0)
output = output.decode("UTF8")
assert f"\n{username}:" in output
def host_user_has_shell(ctx, username=None, shell=None):
assert_eq = globals()["assert_eq"]
qemu = ctx["qemu"]
output, exit = qemu.ssh(["getent", "passwd", username])
assert_eq(exit, 0)
for line in output.decode("UTF8").splitlines():
if line.startswith(f"{username}:"):
logging.debug(f"host_user_has_shell: line={line!r}")
assert line.endswith(f":{shell}")
def host_user_has_password(ctx, username=None, password=None):
assert_eq = globals()["assert_eq"]
qemu = ctx["qemu"]
output, exit = qemu.ssh(["sudo", "grep", f"^{username}:", "/etc/shadow"])
assert_eq(exit, 0)
for line in output.decode("UTF8").splitlines():
if line.startswith(f"{username}:"):
parts = line.split(":")
assert_eq(parts[1], password)
def host_user_has_authorized_keys_containing(ctx, username=None, substring=None):
assert_eq = globals()["assert_eq"]
qemu = ctx["qemu"]
output, exit = qemu.ssh(["sudo", "cat", f"/home/{username}/.ssh/authorized_keys"])
assert_eq(exit, 0)
output = output.decode("UTF8")
assert substring in output
|