From fd0b22cb55e286a0fef68388d5469cbeb16ddfc3 Mon Sep 17 00:00:00 2001 From: nekral-guest Date: Tue, 20 Nov 2007 20:59:42 +0000 Subject: [PATCH] If the shadow group file is not present, do not try to locate the group entry from /etc/gshadow, and set the password in /etc/group. --- ChangeLog | 6 ++++++ src/chgpasswd.c | 31 +++++++++++++++++++------------ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0b9f1636..1449de15 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-11-20 Nicolas François + + * src/chgpasswd.c: If the shadow group file is not present, do not + try to locate the group entry from /etc/gshadow, and set the + password in /etc/group. + 2007-11-20 Nicolas François * libmisc/obscure.c, libmisc/salt.c, src/passwd.c: Match DES, MD5, diff --git a/src/chgpasswd.c b/src/chgpasswd.c index 2eabb2b7..8de443fc 100644 --- a/src/chgpasswd.c +++ b/src/chgpasswd.c @@ -116,6 +116,9 @@ int main (int argc, char **argv) #endif const struct group *gr; +#ifndef SHADOWGRP + struct group newgr; +#endif int errors = 0; int line = 0; int ok; @@ -124,9 +127,6 @@ int main (int argc, char **argv) pam_handle_t *pamh = NULL; int retval; #endif -#ifndef SHADOWGRP - struct group newgr; -#endif Prog = Basename (argv[0]); @@ -336,7 +336,10 @@ int main (int argc, char **argv) continue; } #ifdef SHADOWGRP - sg = sgr_locate (name); + if (is_shadow_grp) + sg = sgr_locate (name); + else + sg = NULL; #endif /* @@ -345,12 +348,15 @@ int main (int argc, char **argv) * date is set to the current date. */ #ifdef SHADOWGRP - newsg = *sg; - newsg.sg_passwd = cp; -#else - newgr = *gr; - newgr.gr_passwd = cp; + if (sg) { + newsg = *sg; + newsg.sg_passwd = cp; + } else #endif + { + newgr = *gr; + newgr.gr_passwd = cp; + } /* * The updated password file entry is then put back and will @@ -358,10 +364,11 @@ int main (int argc, char **argv) * other entries have been updated as well. */ #ifdef SHADOWGRP - ok = sgr_update (&newsg); -#else - ok = gr_update (&newgr); + if (sg) + ok = sgr_update (&newsg); + else #endif + ok = gr_update (&newgr); if (!ok) { fprintf (stderr,