Fix the handling of -a when a user is being renamed (with -l). The new

name of the user was used for the new supplementary groups, but not in the
existing ones.
This commit is contained in:
nekral-guest 2008-02-10 20:25:39 +00:00
parent ead95673a5
commit a5f949165a
3 changed files with 11 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2008-02-10 Nicolas François <nicolas.francois@centraliens.net>
* NEWS, src/usermod.c: Fix the handling of -a when a user is being
renamed (with -l). The new name of the user was used for the new
supplementary groups, but not in the existing ones.
2008-02-10 Nicolas François <nicolas.francois@centraliens.net> 2008-02-10 Nicolas François <nicolas.francois@centraliens.net>
* src/newusers.c: Set the shadow's password instead of the * src/newusers.c: Set the shadow's password instead of the

1
NEWS
View File

@ -65,6 +65,7 @@ shadow-4.1.0 -> shadow-4.1.1 UNRELEASED
one, no changes will be performed for that field. If no fields are one, no changes will be performed for that field. If no fields are
changed, usermod will exist successfully with a warning. This avoids changed, usermod will exist successfully with a warning. This avoids
logging changes to syslog when there are actually no changes. logging changes to syslog when there are actually no changes.
* Fix the handling of -a when a user is being renamed (with -l)
- vipw/vigr - vipw/vigr
* Recommend editing the shadowed (resp. regular) file if the regular (resp. * Recommend editing the shadowed (resp. regular) file if the regular (resp.
shadowed) file was edited. shadowed) file was edited.

View File

@ -533,7 +533,8 @@ static void update_group (void)
* concurrent groups. * concurrent groups.
*/ */
was_member = is_on_list (grp->gr_mem, user_name); was_member = is_on_list (grp->gr_mem, user_name);
is_member = Gflg && is_on_list (user_groups, grp->gr_name); is_member = Gflg && ( (was_member && aflg)
|| is_on_list (user_groups, grp->gr_name));
if (!was_member && !is_member) if (!was_member && !is_member)
continue; continue;
@ -629,6 +630,8 @@ static void update_gshadow (void)
* concurrent groups. * concurrent groups.
*/ */
is_member = Gflg && is_on_list (user_groups, sgrp->sg_name); is_member = Gflg && is_on_list (user_groups, sgrp->sg_name);
is_member = Gflg && ( (was_member && aflg)
|| is_on_list (user_groups, sgrp->sg_name));
if (!was_member && !was_admin && !is_member) if (!was_member && !was_admin && !is_member)
continue; continue;