From: nekral-guest Date: Sun, 10 Feb 2008 20:25:39 +0000 (+0000) Subject: Fix the handling of -a when a user is being renamed (with -l). The new X-Git-Tag: 4.1.1~60 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a5f949165a0ede56dc45c67b92b98466f82e7140;p=thirdparty%2Fshadow.git 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. --- diff --git a/ChangeLog b/ChangeLog index 56c2ecb28..5d5929bde 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-02-10 Nicolas François + + * 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 * src/newusers.c: Set the shadow's password instead of the diff --git a/NEWS b/NEWS index 0d853b998..1aad29845 100644 --- a/NEWS +++ b/NEWS @@ -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 changed, usermod will exist successfully with a warning. This avoids 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 * Recommend editing the shadowed (resp. regular) file if the regular (resp. shadowed) file was edited. diff --git a/src/usermod.c b/src/usermod.c index 5246650a0..1ff4fc868 100644 --- a/src/usermod.c +++ b/src/usermod.c @@ -533,7 +533,8 @@ static void update_group (void) * concurrent groups. */ 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) continue; @@ -629,6 +630,8 @@ static void update_gshadow (void) * concurrent groups. */ 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) continue;