[Pkg-shadow-commits] r1891 - in upstream/trunk: . src
nekral-guest at alioth.debian.org
nekral-guest at alioth.debian.org
Sat Mar 8 22:44:53 UTC 2008
Author: nekral-guest
Date: 2008-03-08 22:44:53 +0000 (Sat, 08 Mar 2008)
New Revision: 1891
Modified:
upstream/trunk/ChangeLog
upstream/trunk/NEWS
upstream/trunk/src/useradd.c
Log:
Make sure the passwd, group, shadow, and gshadow files are unlocked on
exit. Unlock locked files in fail_exit(). Prefer fail_exit() over exit().
Modified: upstream/trunk/ChangeLog
===================================================================
--- upstream/trunk/ChangeLog 2008-03-08 21:13:54 UTC (rev 1890)
+++ upstream/trunk/ChangeLog 2008-03-08 22:44:53 UTC (rev 1891)
@@ -1,5 +1,11 @@
2008-03-08 Nicolas François <nicolas.francois at centraliens.net>
+ * NEWS, src/useradd.c: Make sure the passwd, group, shadow, and
+ gshadow files are unlocked on exit. Unlock locked files in
+ fail_exit(). Prefer fail_exit() over exit().
+
+2008-03-08 Nicolas François <nicolas.francois at centraliens.net>
+
* NEWS, src/groupdel.c: Make sure the group, and gshadow files are
unlocked on exit. Add function fail_exit(). Use fail_exit()
instead of exit().
Modified: upstream/trunk/NEWS
===================================================================
--- upstream/trunk/NEWS 2008-03-08 21:13:54 UTC (rev 1890)
+++ upstream/trunk/NEWS 2008-03-08 22:44:53 UTC (rev 1891)
@@ -88,6 +88,8 @@
should replace nflg from the previous versions. Please set any -n
option to deprecated because its meaning differs from one distribution
to the other.
+ * Make sure the passwd, group, shadow, and gshadow files are unlocked on
+ exit.
- usermod
* Keep the access and modification time of files when moving an user's home
directory.
Modified: upstream/trunk/src/useradd.c
===================================================================
--- upstream/trunk/src/useradd.c 2008-03-08 21:13:54 UTC (rev 1890)
+++ upstream/trunk/src/useradd.c 2008-03-08 22:44:53 UTC (rev 1891)
@@ -107,7 +107,11 @@
#ifdef SHADOWGRP
static int is_shadow_grp;
+static int gshadow_locked = 0;
#endif
+static int passwd_locked = 0;
+static int group_locked = 0;
+static int shadow_locked = 0;
static char **user_groups; /* NULL-terminated list */
static long sys_ngroups;
static int do_grp_update = 0; /* group files need to be updated */
@@ -190,6 +194,21 @@
if (home_added)
rmdir (user_home);
+ if (shadow_locked) {
+ spw_unlock ();
+ }
+ if (passwd_locked) {
+ pw_unlock ();
+ }
+ if (group_locked) {
+ gr_unlock ();
+ }
+#ifdef SHADOWGRP
+ if (gshadow_locked) {
+ sgr_unlock ();
+ }
+#endif
+
#ifdef WITH_AUDIT
audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "adding user", user_name, -1,
0);
@@ -1170,13 +1189,19 @@
}
#endif
}
- if (is_shadow_pwd)
+ if (is_shadow_pwd) {
spw_unlock ();
+ shadow_locked--;
+ }
pw_unlock ();
+ passwd_locked--;
gr_unlock ();
+ group_locked--;
#ifdef SHADOWGRP
- if (is_shadow_grp)
+ if (is_shadow_grp) {
sgr_unlock ();
+ gshadow_locked--;
+ }
#endif
}
@@ -1195,61 +1220,69 @@
#endif
exit (E_PW_UPDATE);
}
+ passwd_locked++;
if (!pw_open (O_RDWR)) {
fprintf (stderr, _("%s: unable to open password file\n"), Prog);
#ifdef WITH_AUDIT
audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
"opening password file", user_name, user_id, 0);
#endif
- pw_unlock ();
- exit (E_PW_UPDATE);
+ fail_exit (E_PW_UPDATE);
}
- if (is_shadow_pwd && !spw_lock ()) {
- fprintf (stderr,
- _("%s: cannot lock shadow password file\n"), Prog);
+ if (is_shadow_pwd) {
+ if (!spw_lock ()) {
+ fprintf (stderr,
+ _("%s: cannot lock shadow password file\n"),
+ Prog);
#ifdef WITH_AUDIT
- audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
- "locking shadow password file", user_name,
- user_id, 0);
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "locking shadow password file", user_name,
+ user_id, 0);
#endif
- pw_unlock ();
- exit (E_PW_UPDATE);
- }
- if (is_shadow_pwd && !spw_open (O_RDWR)) {
- fprintf (stderr,
- _("%s: cannot open shadow password file\n"), Prog);
+ fail_exit (E_PW_UPDATE);
+ }
+ shadow_locked++;
+ if (!spw_open (O_RDWR)) {
+ fprintf (stderr,
+ _("%s: cannot open shadow password file\n"),
+ Prog);
#ifdef WITH_AUDIT
- audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
- "opening shadow password file", user_name,
- user_id, 0);
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "opening shadow password file", user_name,
+ user_id, 0);
#endif
- spw_unlock ();
- pw_unlock ();
- exit (E_PW_UPDATE);
+ fail_exit (E_PW_UPDATE);
+ }
}
+
/*
* Lock and open the group file.
*/
-
if (!gr_lock ()) {
fprintf (stderr, _("%s: error locking group file\n"), Prog);
fail_exit (E_GRP_UPDATE);
}
+ group_locked++;
if (!gr_open (O_RDWR)) {
fprintf (stderr, _("%s: error opening group file\n"), Prog);
fail_exit (E_GRP_UPDATE);
}
#ifdef SHADOWGRP
- if (is_shadow_grp && !sgr_lock ()) {
- fprintf (stderr,
- _("%s: error locking shadow group file\n"), Prog);
- fail_exit (E_GRP_UPDATE);
+ if (is_shadow_grp) {
+ if (!sgr_lock ()) {
+ fprintf (stderr,
+ _("%s: error locking shadow group file\n"),
+ Prog);
+ fail_exit (E_GRP_UPDATE);
+ }
+ gshadow_locked++;
+ if (!sgr_open (O_RDWR)) {
+ fprintf (stderr,
+ _("%s: error opening shadow group file\n"),
+ Prog);
+ fail_exit (E_GRP_UPDATE);
+ }
}
- if (is_shadow_grp && !sgr_open (O_RDWR)) {
- fprintf (stderr,
- _("%s: error opening shadow group file\n"), Prog);
- fail_exit (E_GRP_UPDATE);
- }
#endif
}
@@ -1405,7 +1438,7 @@
if (!pw_update (&pwent)) {
fprintf (stderr,
_("%s: error adding new password entry\n"), Prog);
- exit (E_PW_UPDATE);
+ fail_exit (E_PW_UPDATE);
}
/*
@@ -1420,7 +1453,7 @@
audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
"adding shadow password", user_name, user_id, 0);
#endif
- exit (E_PW_UPDATE);
+ fail_exit (E_PW_UPDATE);
}
#ifdef WITH_AUDIT
audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "adding user", user_name,
@@ -1588,7 +1621,7 @@
if (retval != PAM_SUCCESS) {
fprintf (stderr, _("%s: PAM authentication failed\n"), Prog);
- exit (1);
+ fail_exit (1);
}
#endif /* USE_PAM */
@@ -1613,7 +1646,7 @@
audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "adding user",
user_name, -1, 0);
#endif
- exit (E_NAME_IN_USE);
+ fail_exit (E_NAME_IN_USE);
}
/*
@@ -1632,7 +1665,7 @@
audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
"adding group", user_name, -1, 0);
#endif
- exit (E_NAME_IN_USE);
+ fail_exit (E_NAME_IN_USE);
}
}
@@ -1662,7 +1695,7 @@
#ifdef WITH_AUDIT
audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "adding user", user_name, user_id, 0);
#endif
- exit (E_UID_IN_USE);
+ fail_exit (E_UID_IN_USE);
}
}
}
@@ -1723,6 +1756,5 @@
pam_end (pamh, PAM_SUCCESS);
#endif /* USE_PAM */
- exit (E_SUCCESS);
- /* NOT REACHED */
+ return E_SUCCESS;
}
More information about the Pkg-shadow-commits
mailing list