[Pkg-shadow-commits] r1890 - in upstream/trunk: . src

nekral-guest at alioth.debian.org nekral-guest at alioth.debian.org
Sat Mar 8 21:13:55 UTC 2008


Author: nekral-guest
Date: 2008-03-08 21:13:54 +0000 (Sat, 08 Mar 2008)
New Revision: 1890

Modified:
   upstream/trunk/ChangeLog
   upstream/trunk/NEWS
   upstream/trunk/src/groupdel.c
Log:
	* 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().
	* src/groupdel.c: Fail immediately instead of increasing errors.
	Better handling of error cases, like locked group or gshadow file.


Modified: upstream/trunk/ChangeLog
===================================================================
--- upstream/trunk/ChangeLog	2008-03-08 21:04:31 UTC (rev 1889)
+++ upstream/trunk/ChangeLog	2008-03-08 21:13:54 UTC (rev 1890)
@@ -1,5 +1,13 @@
 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().
+	* src/groupdel.c: Fail immediately instead of increasing errors.
+	Better handling of error cases, like locked group or gshadow file.
+
+2008-03-08  Nicolas François  <nicolas.francois at centraliens.net>
+
 	* NEWS, src/newusers.c: Make sure the passwd, group, shadow, 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:04:31 UTC (rev 1889)
+++ upstream/trunk/NEWS	2008-03-08 21:13:54 UTC (rev 1890)
@@ -35,6 +35,7 @@
 - groupdel
   * Do not fail if the group does not exist in the gshadow file.
   * Do not rewrite the group or gshadow file in case of error.
+  * Make sure the group and gshadow files are unlocked on exit.
 - groupmems
   * Fix buffer overflow when adding an user to a group. Thanks to Peter Vrabec.
 - groupmod

Modified: upstream/trunk/src/groupdel.c
===================================================================
--- upstream/trunk/src/groupdel.c	2008-03-08 21:04:31 UTC (rev 1889)
+++ upstream/trunk/src/groupdel.c	2008-03-08 21:13:54 UTC (rev 1890)
@@ -70,6 +70,7 @@
 
 /* local function prototypes */
 static void usage (void);
+static void fail_exit (int);
 static void grp_update (void);
 static void close_files (void);
 static void open_files (void);
@@ -85,6 +86,26 @@
 }
 
 /*
+ * fail_exit - exit with a failure code after unlocking the files
+ */
+static void fail_exit (int code)
+{
+	(void) gr_unlock ();
+#ifdef	SHADOWGRP
+	if (is_shadow_grp) {
+		sgr_unlock ();
+	}
+#endif
+
+#ifdef	WITH_AUDIT
+	audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "deleting group",
+	              group_name, -1, 0);
+#endif
+
+	exit (code);
+}
+
+/*
  * grp_update - update group file entries
  *
  *	grp_update() writes the new records to the group files.
@@ -93,7 +114,7 @@
 {
 	if (!gr_remove (group_name)) {
 		fprintf (stderr, _("%s: error removing group entry\n"), Prog);
-		errors++;
+		fail_exit (E_GRP_UPDATE);
 	}
 #ifdef	SHADOWGRP
 	/*
@@ -104,7 +125,7 @@
 			fprintf (stderr,
 			         _("%s: error removing shadow group entry\n"),
 			         Prog);
-			errors++;
+			fail_exit (E_GRP_UPDATE);
 		}
 	}
 #endif				/* SHADOWGRP */
@@ -127,14 +148,14 @@
 
 	if (!gr_close ()) {
 		fprintf (stderr, _("%s: cannot rewrite group file\n"), Prog);
-		errors++;
+		fail_exit (E_GRP_UPDATE);
 	}
 	gr_unlock ();
 #ifdef	SHADOWGRP
 	if (is_shadow_grp && !sgr_close ()) {
 		fprintf (stderr,
 			 _("%s: cannot rewrite shadow group file\n"), Prog);
-		errors++;
+		fail_exit (E_GRP_UPDATE);
 	}
 	if (is_shadow_grp)
 		sgr_unlock ();
@@ -150,22 +171,22 @@
 {
 	if (!gr_lock ()) {
 		fprintf (stderr, _("%s: unable to lock group file\n"), Prog);
-		exit (E_GRP_UPDATE);
+		fail_exit (E_GRP_UPDATE);
 	}
 	if (!gr_open (O_RDWR)) {
 		fprintf (stderr, _("%s: unable to open group file\n"), Prog);
-		exit (E_GRP_UPDATE);
+		fail_exit (E_GRP_UPDATE);
 	}
 #ifdef	SHADOWGRP
 	if (is_shadow_grp && !sgr_lock ()) {
 		fprintf (stderr,
 			 _("%s: unable to lock shadow group file\n"), Prog);
-		exit (E_GRP_UPDATE);
+		fail_exit (E_GRP_UPDATE);
 	}
 	if (is_shadow_grp && !sgr_open (O_RDWR)) {
 		fprintf (stderr,
 			 _("%s: unable to open shadow group file\n"), Prog);
-		exit (E_GRP_UPDATE);
+		fail_exit (E_GRP_UPDATE);
 	}
 #endif				/* SHADOWGRP */
 }
@@ -202,7 +223,7 @@
 	 * Can't remove the group.
 	 */
 	fprintf (stderr, _("%s: cannot remove user's primary group.\n"), Prog);
-	exit (E_GROUP_BUSY);
+	fail_exit (E_GROUP_BUSY);
 }
 
 /*
@@ -340,21 +361,16 @@
 	open_files ();
 
 	grp_update ();
-	if (errors == 0) {
-		close_files ();
-		nscd_flush_cache ("group");
-	}
 
+	close_files ();
+
+	nscd_flush_cache ("group");
+
 #ifdef USE_PAM
 	if (retval == PAM_SUCCESS)
 		pam_end (pamh, PAM_SUCCESS);
 #endif				/* USE_PAM */
-	if (errors != 0)
-#ifdef WITH_AUDIT
-		audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "deleting group",
-			      group_name, -1, 0);
-#endif
-	exit (errors == 0 ? E_SUCCESS : E_GRP_UPDATE);
-	/* NOT REACHED */
-	return 0;
+
+	return E_SUCCESS;
 }
+




More information about the Pkg-shadow-commits mailing list