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 <apyhalov@gmail.com>
This commit is contained in:
parent
bf0690b15c
commit
7863d1acd7
@ -380,6 +380,8 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args)
|
|||||||
char file[MAXPATHLEN];
|
char file[MAXPATHLEN];
|
||||||
char home[MAXPATHLEN];
|
char home[MAXPATHLEN];
|
||||||
uid_t uid = pwd->pw_uid;
|
uid_t uid = pwd->pw_uid;
|
||||||
|
struct group *gr;
|
||||||
|
char grname[LOGNAMESIZE];
|
||||||
|
|
||||||
if (strcmp(pwd->pw_name, "root") == 0)
|
if (strcmp(pwd->pw_name, "root") == 0)
|
||||||
errx(EX_DATAERR, "cannot remove user 'root'");
|
errx(EX_DATAERR, "cannot remove user 'root'");
|
||||||
@ -406,6 +408,11 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args)
|
|||||||
*/
|
*/
|
||||||
sprintf(file, "%s/%s", _PATH_MAILDIR, pwd->pw_name);
|
sprintf(file, "%s/%s", _PATH_MAILDIR, pwd->pw_name);
|
||||||
strlcpy(home, pwd->pw_dir, sizeof(home));
|
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);
|
rc = delpwent(pwd);
|
||||||
if (rc == -1)
|
if (rc == -1)
|
||||||
@ -426,7 +433,8 @@ pw_user(struct userconf * cnf, int mode, struct cargs * args)
|
|||||||
|
|
||||||
grp = GETGRNAM(a_name->val);
|
grp = GETGRNAM(a_name->val);
|
||||||
if (grp != NULL &&
|
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));
|
delgrent(GETGRNAM(a_name->val));
|
||||||
SETGRENT();
|
SETGRENT();
|
||||||
while ((grp = GETGRENT()) != NULL) {
|
while ((grp = GETGRENT()) != NULL) {
|
||||||
|
Loading…
Reference in New Issue
Block a user