support/testing: new test for root password
Add support to test that the root passowrd is working as expected. - Buildtime test: Check the hash present in the generated '/etc/shadow'. - Runtime test: Build an armv7 image and try to login with a password. Signed-off-by: Victor Huesca <victor.huesca@bootlin.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
parent
0213feb823
commit
152776b420
@ -341,6 +341,7 @@ tests.core.test_hardening.TestRelroPartial: { extends: .runtime_test }
|
||||
tests.core.test_hardening.TestSspNone: { extends: .runtime_test }
|
||||
tests.core.test_hardening.TestSspStrong: { extends: .runtime_test }
|
||||
tests.core.test_post_scripts.TestPostScripts: { extends: .runtime_test }
|
||||
tests.core.test_root_password.TestRootPassword: { extends: .runtime_test }
|
||||
tests.core.test_rootfs_overlay.TestRootfsOverlay: { extends: .runtime_test }
|
||||
tests.core.test_timezone.TestGlibcAllTimezone: { extends: .runtime_test }
|
||||
tests.core.test_timezone.TestGlibcNonDefaultLimitedTimezone: { extends: .runtime_test }
|
||||
|
@ -2308,6 +2308,9 @@ F: package/llvm/
|
||||
N: Vanya Sergeev <vsergeev@gmail.com>
|
||||
F: package/lua-periphery/
|
||||
|
||||
N: Victor Huesca <victor.huesca@bootlin.com>
|
||||
F: support/testing/tests/core/test_root_password.py
|
||||
|
||||
N: Vincent Prince <vincent.prince.fr@gmail.com>
|
||||
F: package/nss-myhostname/
|
||||
F: package/utp_com/
|
||||
|
36
support/testing/tests/core/test_root_password.py
Normal file
36
support/testing/tests/core/test_root_password.py
Normal file
@ -0,0 +1,36 @@
|
||||
import os
|
||||
import infra.basetest
|
||||
from crypt import crypt
|
||||
|
||||
|
||||
class TestRootPassword(infra.basetest.BRTest):
|
||||
password = "foo"
|
||||
config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
|
||||
"""
|
||||
BR2_TARGET_ROOTFS_CPIO=y
|
||||
BR2_TARGET_ENABLE_ROOT_LOGIN=y
|
||||
BR2_TARGET_GENERIC_ROOT_PASSWD="{}"
|
||||
""".format(password)
|
||||
|
||||
def test_run(self):
|
||||
# 1. Test by looking hash in the /etc/shadow
|
||||
shadow = os.path.join(self.builddir, "target", "etc", "shadow")
|
||||
with open(shadow, "r") as f:
|
||||
users = f.readlines()
|
||||
for user in users:
|
||||
s = user.split(":")
|
||||
n, h = s[0], s[1]
|
||||
if n == "root":
|
||||
# Fail if the account is disabled or no password is required
|
||||
self.assertTrue(h not in ["", "*"])
|
||||
# Fail if the hash isn't right
|
||||
self.assertEqual(crypt(self.password, h), h)
|
||||
|
||||
# 2. Test by attempting to login
|
||||
cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio")
|
||||
try:
|
||||
self.emulator.boot(arch="armv7", kernel="builtin",
|
||||
options=["-initrd", cpio_file])
|
||||
self.emulator.login(self.password)
|
||||
except SystemError:
|
||||
self.fail("Unable to login with the password")
|
Loading…
Reference in New Issue
Block a user