| import os |
| |
| from infra.basetest import BRTest |
| |
| |
| class TestShadow(BRTest): |
| username = 'user_test' |
| # Need to use a different toolchain than the default due to |
| # shadow package requiring a toolchain w/ headers >= 4.14 |
| config = \ |
| """ |
| BR2_arm=y |
| BR2_TOOLCHAIN_EXTERNAL=y |
| BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y |
| BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_BLEEDING_EDGE=y |
| BR2_PACKAGE_SHADOW=y |
| BR2_TARGET_ROOTFS_EXT2=y |
| BR2_TARGET_ROOTFS_EXT2_4=y |
| BR2_TARGET_ROOTFS_EXT2_SIZE="65536" |
| """ |
| timeout = 60 |
| |
| def login(self): |
| img = os.path.join(self.builddir, "images", "rootfs.ext4") |
| self.emulator.boot(arch="armv7", |
| kernel="builtin", |
| kernel_cmdline=["root=/dev/mmcblk0", |
| "rootfstype=ext4"], |
| options=["-drive", f"file={img},if=sd,format=raw"]) |
| self.emulator.login() |
| |
| def test_nologin(self): |
| self.login() |
| |
| self.assertRunOk("! nologin") |
| cmd = 'test "$(nologin)" = "This account is currently not available."' |
| self.assertRunOk(cmd) |
| |
| def test_useradd_del(self): |
| username = self.username |
| self.login() |
| |
| self.assertRunOk(f'userdel {username} || true') |
| self.assertRunOk(f'groupdel {username} || true') |
| self.assertRunOk(f'useradd -s /bin/sh {username}') |
| self.assertRunOk(f'test $(su {username} -c "whoami") = {username}') |
| self.assertRunOk(f'userdel {username}') |
| |
| def test_usermod(self): |
| username = self.username |
| new_home = '/tmp' |
| self.login() |
| |
| self.assertRunOk(f'userdel {username} || true') |
| self.assertRunOk(f'groupdel {username} || true') |
| self.assertRunOk(f'useradd -s /bin/sh {username}') |
| self.assertRunOk(f'usermod {username} --home {new_home}') |
| self.assertRunOk(f'test $(su {username} -c \'echo $HOME\') = {new_home}') |
| self.assertRunOk(f'userdel {username}') |