Hi! On Mon, Sep 12, 2005 at 07:33:17AM +0200, [EMAIL PROTECTED] wrote: > http://bugs.debian.org/295416 is a long bug long, but it can be > resumed as: > > [EMAIL PROTECTED]:~# groupadd bug295416 > [EMAIL PROTECTED]:~# useradd -g bug295416 bug295416 > [EMAIL PROTECTED]:~# useradd -g bug295416 other295416 > [EMAIL PROTECTED]:~# userdel bug295416 > [EMAIL PROTECTED]:~# getent group bug295416 > [EMAIL PROTECTED]:~# > > Das ist nich gut.... > > I'm pretty sure that finding a patch for this is easy, if we assume > that Tomasz is currently focused on other tasks and can't handle it.
The attached patch do not really fix this, but can be used as a basis. I think we all agree that the user must be warned, don't we? The problem is shall we remove the group or not? Do we need a special return value? What should the warning tell? Currently: Warning: The primary group of bug295416 (bug295416, GID=1003) will be removed, but is also the primary group of other295416 (ID=1002). I tend to agree with Alexander: if we delete the group (with a warning), the system databases won't be consistent. I would prefer to let the group, and warn the administrator, so that she can delete the group with groupdel if needed. Kind Regards, -- Nekral
--- userdel.c.orig 2005-10-01 17:06:55.000000000 +0200 +++ userdel.c 2005-10-01 18:27:16.000000000 +0200 @@ -121,6 +121,7 @@ { const struct group *grp; struct group *ngrp; + struct passwd *pwd; #ifdef SHADOWGRP int deleted_user_group = 0; @@ -174,6 +175,21 @@ if (grp && getdef_bool ("USERGROUPS_ENAB") && (grp->gr_mem[0] == NULL)) { + /* + * Scan the passwd file to check if this group is still + * used as a primary group. + */ + setpwent (); + while ((pwd = getpwent ())) { + if (strcmp (pwd->pw_name, user_name) == 0) + continue; + if (pwd->pw_gid == grp->gr_gid) { + printf("Warning: The primary group of %s (%s, GID=%d) will be removed, but is also the primary group of %s (ID=%d).\n", user_name, grp->gr_name, grp->gr_gid, pwd->pw_name, pwd->pw_uid); + /* break; */ + } + } + endpwent(); + gr_remove (grp->gr_name); #ifdef SHADOWGRP @@ -658,6 +674,7 @@ break; } } + endpwent(); } #endif