From 9ac650401ffc2fb05c9328d26e76a5e7ae39152a Mon Sep 17 00:00:00 2001 From: Matt Johnston Date: Mon, 11 Dec 2023 23:31:22 +0800 Subject: Fix test for multiuser kernels getuid() succeeds even on non-multiuser kernels. Instead getgroups() is a valid test. Fixes #214 on github --- common-session.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) --- a/common-session.c +++ b/common-session.c @@ -71,10 +71,13 @@ void common_session_init(int sock_in, in #if !DROPBEAR_SVR_MULTIUSER /* A sanity check to prevent an accidental configuration option leaving multiuser systems exposed */ - errno = 0; - getuid(); - if (errno != ENOSYS) { - dropbear_exit("Non-multiuser Dropbear requires a non-multiuser kernel"); + { + int ret; + errno = 0; + ret = getgroups(0, NULL); + if (!(ret == -1 && errno == ENOSYS)) { + dropbear_exit("Non-multiuser Dropbear requires a non-multiuser kernel"); + } } #endif