Author: dteske
Date: Thu Mar 13 18:16:42 2014
New Revision: 263114
URL: http://svnweb.freebsd.org/changeset/base/263114

Log:
  Fix pw(8) deletion of group "username" on userdel even if group "username"
  is not associated with user "username". E.g., user "foo" has primary group
  "wheel" and is unassociated with group "foo", yet userdel would delete the
  group "foo" when deleting user "foo" (despite the fact that user "foo" is
  not associated with group "foo" in any way).
  
  Patch committed with minor style(9) changes.
  
  PR:           bin/169471
  Submitted by: Alexander Pyhalov <[email protected]>

Modified:
  head/usr.sbin/pw/pw_user.c

Modified: head/usr.sbin/pw/pw_user.c
==============================================================================
--- head/usr.sbin/pw/pw_user.c  Thu Mar 13 18:11:42 2014        (r263113)
+++ head/usr.sbin/pw/pw_user.c  Thu Mar 13 18:16:42 2014        (r263114)
@@ -380,6 +380,8 @@ pw_user(struct userconf * cnf, int mode,
                        char            file[MAXPATHLEN];
                        char            home[MAXPATHLEN];
                        uid_t           uid = pwd->pw_uid;
+                       struct group    *gr;
+                       char            grname[LOGNAMESIZE];
 
                        if (strcmp(pwd->pw_name, "root") == 0)
                                errx(EX_DATAERR, "cannot remove user 'root'");
@@ -406,6 +408,11 @@ pw_user(struct userconf * cnf, int mode,
                         */
                        sprintf(file, "%s/%s", _PATH_MAILDIR, pwd->pw_name);
                        strlcpy(home, pwd->pw_dir, sizeof(home));
+                       gr = GETGRGID(pwd->pw_gid);
+                       if (gr != NULL)
+                               strlcpy(grname, gr->gr_name, LOGNAMESIZE);
+                       else
+                               grname[0] = '\0';
 
                        rc = delpwent(pwd);
                        if (rc == -1)
@@ -426,7 +433,8 @@ pw_user(struct userconf * cnf, int mode,
 
                        grp = GETGRNAM(a_name->val);
                        if (grp != NULL &&
-                           (grp->gr_mem == NULL || *grp->gr_mem == NULL))
+                           (grp->gr_mem == NULL || *grp->gr_mem == NULL) &&
+                           strcmp(a_name->val, grname) == 0)
                                delgrent(GETGRNAM(a_name->val));
                        SETGRENT();
                        while ((grp = GETGRENT()) != NULL) {
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to