deluser: check if specified home is a directory before removing it
authorSören Tempel <soeren+git@soeren-tempel.net>
Tue, 9 Jun 2020 15:51:26 +0000 (17:51 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 9 Jun 2020 16:04:31 +0000 (18:04 +0200)
commit0356607264b8e1476d98a81667488ba1d6295d23
tree65879ea7e3ebdb9171baaed1b5c8c9be12446135
parentd30d1ebc117db182a6156df182057291d6fbaae1
deluser: check if specified home is a directory before removing it

On Alpine, some users use /dev/null as a home directory. When removing
such a user with `deluser --remove-home` this causes the /dev/null
device file to be removed which is undesirable. To prevent this pitfall,
check if the home directory specified for the user is an actual
directory (or a symlink to a directory).

Implementations of similar tools for other operating systems also
implement such checks. For instance, the OpenBSD rmuser(1)
implementation [0].

[0]: https://github.com/openbsd/src/blob/b69faa6c70c5bfcfdddc6138cd8e0ee18cc15b03/usr.sbin/adduser/rmuser.perl#L143-L151

function                                             old     new   delta
deluser_main                                         337     380     +43

Signed-off-by: Sören Tempel <soeren+git@soeren-tempel.net>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
loginutils/deluser.c