| 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") |