1import os 2 3from infra.basetest import BRTest 4 5 6class TestShadow(BRTest): 7 username = 'user_test' 8 # Need to use a different toolchain than the default due to 9 # shadow package requiring a toolchain w/ headers >= 4.14 10 config = \ 11 """ 12 BR2_arm=y 13 BR2_TOOLCHAIN_EXTERNAL=y 14 BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y 15 BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_BLEEDING_EDGE=y 16 BR2_PACKAGE_SHADOW=y 17 BR2_TARGET_ROOTFS_EXT2=y 18 BR2_TARGET_ROOTFS_EXT2_4=y 19 BR2_TARGET_ROOTFS_EXT2_SIZE="65536" 20 """ 21 timeout = 60 22 23 def login(self): 24 img = os.path.join(self.builddir, "images", "rootfs.ext4") 25 self.emulator.boot(arch="armv7", 26 kernel="builtin", 27 kernel_cmdline=["root=/dev/mmcblk0", 28 "rootfstype=ext4"], 29 options=["-drive", f"file={img},if=sd,format=raw"]) 30 self.emulator.login() 31 32 def test_nologin(self): 33 self.login() 34 35 self.assertRunOk("! nologin") 36 cmd = 'test "$(nologin)" = "This account is currently not available."' 37 self.assertRunOk(cmd) 38 39 def test_useradd_del(self): 40 username = self.username 41 self.login() 42 43 self.assertRunOk(f'userdel {username} || true') 44 self.assertRunOk(f'groupdel {username} || true') 45 self.assertRunOk(f'useradd -s /bin/sh {username}') 46 self.assertRunOk(f'test $(su {username} -c "whoami") = {username}') 47 self.assertRunOk(f'userdel {username}') 48 49 def test_usermod(self): 50 username = self.username 51 new_home = '/tmp' 52 self.login() 53 54 self.assertRunOk(f'userdel {username} || true') 55 self.assertRunOk(f'groupdel {username} || true') 56 self.assertRunOk(f'useradd -s /bin/sh {username}') 57 self.assertRunOk(f'usermod {username} --home {new_home}') 58 self.assertRunOk(f'test $(su {username} -c \'echo $HOME\') = {new_home}') 59 self.assertRunOk(f'userdel {username}') 60