diff --git a/ChangeLog b/ChangeLog index 0608a7f4..21b4c976 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-03-15 Nicolas François + + * NEWS, src/userdel.c: Make sure the user exists in the shadow + database before calling spw_remove(). + * NEWS, src/userdel.c: When the user's group is removed, make sure + the group is in the gshadow database before calling sgr_remove(). + * src/userdel.c: Improve warning's wording. + 2009-03-15 Nicolas François * libmisc/cleanup.c: Fix del_cleanup. The arguments were not diff --git a/NEWS b/NEWS index 5b4b535c..1aaf14e1 100644 --- a/NEWS +++ b/NEWS @@ -98,6 +98,9 @@ shadow-4.1.2.2 -> shadow-4.1.3 UNRELEASED * do not create users with UID set to (gid_t)-1. - userdel * audit logging improvements. + * Do not fail if the removed user is not in the shadow database. + * When the user's group shall be removed, do not fail if this group is + not in the gshadow file. - usermod * Allow adding LDAP users (or any user not present in the local passwd file) to local groups diff --git a/src/userdel.c b/src/userdel.c index 4f6a3f14..907a3cd5 100644 --- a/src/userdel.c +++ b/src/userdel.c @@ -216,7 +216,7 @@ static void update_groups (void) } if (pwd->pw_gid == grp->gr_gid) { fprintf (stderr, - _("%s: Cannot remove group %s which is a primary group for another user.\n"), + _("%s: group %s is the primary group of another user and is not removed.\n"), Prog, grp->gr_name); break; } @@ -309,8 +309,8 @@ static void update_groups (void) user_name, nsgrp->sg_name)); } - if (deleted_user_group) { - /* FIXME: Test if the group is in gshadow first? */ + if ( deleted_user_group + && (sgr_locate (user_name) != NULL)) { if (sgr_remove (user_name) == 0) { fprintf (stderr, _("%s: cannot remove entry '%s' from %s\n"), @@ -559,7 +559,9 @@ static void update_user (void) Prog, user_name, pw_dbname ()); fail_exit (E_PW_UPDATE); } - if (is_shadow_pwd && (spw_remove (user_name) == 0)) { + if ( is_shadow_pwd + && (spw_locate (user_name) != NULL) + && (spw_remove (user_name) == 0)) { fprintf (stderr, _("%s: cannot remove entry '%s' from %s\n"), Prog, user_name, spw_dbname ());