diff --git a/ChangeLog b/ChangeLog index 8915493a..c6ce60a4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2009-04-26 Nicolas François + + * src/newgrp.c: Close the databases before changing the UDI and + GID. + 2009-04-26 Nicolas François * libmisc/myname.c: Updated splint annotations. diff --git a/src/newgrp.c b/src/newgrp.c index 51c2045d..e8169b4e 100644 --- a/src/newgrp.c +++ b/src/newgrp.c @@ -671,6 +671,19 @@ int main (int argc, char **argv) } #endif + /* + * Close all files before changing the user/group IDs. + * + * The needed structure should have been copied before, or + * permission to read the database will be required. + */ + endspent (); +#ifdef SHADOWGRP + endsgent (); +#endif + endpwent (); + endgrent (); + /* * Set the effective GID to the new group id and the effective UID * to the real UID. For root, this also sets the real GID to the @@ -750,13 +763,6 @@ int main (int argc, char **argv) */ cp = Basename ((char *) prog); - endspent (); -#ifdef SHADOWGRP - endsgent (); -#endif - endpwent (); - endgrent (); - /* * Switch back to her home directory if i am doing login * initialization.