From: Denys Vlasenko Date: Sun, 7 Nov 2010 16:51:58 +0000 (+0100) Subject: delgroup: correct the check for users who still use the group X-Git-Tag: 1_18_0~21 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=e057b0f94f679af834d5eb15e10c714c72c16740;p=oweals%2Fbusybox.git delgroup: correct the check for users who still use the group Signed-off-by: Tito Signed-off-by: Denys Vlasenko --- diff --git a/loginutils/deluser.c b/loginutils/deluser.c index 12fbbc673..8ee72ef6f 100644 --- a/loginutils/deluser.c +++ b/loginutils/deluser.c @@ -48,21 +48,21 @@ int deluser_main(int argc, char **argv) if (ENABLE_FEATURE_SHADOWPASSWDS) sfile = bb_path_shadow_file; } else { + struct group *gr; do_delgroup: /* "delgroup GROUP" or "delgroup USER GROUP" */ - xgetgrnam(name); /* bail out if GROUP is wrong */ + gr = xgetgrnam(name); /* bail out if GROUP is wrong */ if (!member) { - /* "delgroup GROUP". - * If user with the same name exists, - * bail out. - */ -//BUG: check should be done by GID, not by matching name! -//1. find GROUP's GID -//2. check that /etc/passwd doesn't have lines of the form -// user:pwd:uid:GID:... -//3. bail out if at least one such line exists - if (getpwnam(name) != NULL) - bb_error_msg_and_die("'%s' still has '%s' as their primary group!", name, name); + /* "delgroup GROUP" */ + struct passwd *pw; + struct passwd pwent; + /* Check if the group is in use */ +#define passwd_buf bb_common_bufsiz1 + while (!getpwent_r(&pwent, passwd_buf, sizeof(passwd_buf), &pw)) { + if (pwent.pw_gid == gr->gr_gid) + bb_error_msg_and_die("'%s' still has '%s' as their primary group!", pwent.pw_name, name); + } + //endpwent(); } pfile = bb_path_group_file; if (ENABLE_FEATURE_SHADOWPASSWDS)