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

nekral-guest at alioth.debian.org nekral-guest at alioth.debian.org
Sat Aug 9 23:33:28 UTC 2008


Author: nekral-guest
Date: 2008-08-09 23:33:26 +0000 (Sat, 09 Aug 2008)
New Revision: 2262

Modified:
   upstream/trunk/ChangeLog
   upstream/trunk/man/pwck.8.xml
   upstream/trunk/src/pwck.c
Log:
	* src/pwck.c: Added fail_exit().
	* src/pwck.c: Report failure to unlock files to stderr and
	syslog.
	* src/pwck.c: Report failure to sort to stderr, and exit with
	E_CANTSORT.
	* man/pwck.8.xml: Document return code 6 (E_CANTSORT).

Modified: upstream/trunk/ChangeLog
===================================================================
--- upstream/trunk/ChangeLog	2008-08-09 23:31:36 UTC (rev 2261)
+++ upstream/trunk/ChangeLog	2008-08-09 23:33:26 UTC (rev 2262)
@@ -1,5 +1,14 @@
 2008-08-07  Nicolas François  <nicolas.francois at centraliens.net>
 
+	* src/pwck.c: Added fail_exit().
+	* src/pwck.c: Report failure to unlock files to stderr and
+	syslog.
+	* src/pwck.c: Report failure to sort to stderr, and exit with
+	E_CANTSORT.
+	* man/pwck.8.xml: Document return code 6 (E_CANTSORT).
+
+2008-08-07  Nicolas François  <nicolas.francois at centraliens.net>
+
 	* src/vipw.c: Report failures to remove files to stderr.
 	* src/vipw.c: Report failures to unlock files to stderr.
 

Modified: upstream/trunk/man/pwck.8.xml
===================================================================
--- upstream/trunk/man/pwck.8.xml	2008-08-09 23:31:36 UTC (rev 2261)
+++ upstream/trunk/man/pwck.8.xml	2008-08-09 23:33:26 UTC (rev 2262)
@@ -245,6 +245,12 @@
 	    <para>can't update password files</para>
 	  </listitem>
 	</varlistentry>
+	<varlistentry>
+	  <term><replaceable>6</replaceable></term>
+	  <listitem>
+	    <para>can't sort password files</para>
+	  </listitem>
+	</varlistentry>
       </variablelist>
     </para>
   </refsect1>

Modified: upstream/trunk/src/pwck.c
===================================================================
--- upstream/trunk/src/pwck.c	2008-08-09 23:31:36 UTC (rev 2261)
+++ upstream/trunk/src/pwck.c	2008-08-09 23:33:26 UTC (rev 2262)
@@ -58,6 +58,7 @@
 #define	E_CANTOPEN	3
 #define	E_CANTLOCK	4
 #define	E_CANTUPDATE	5
+#define	E_CANTSORT	6
 
 /*
  * Global variables
@@ -71,12 +72,16 @@
 
 static bool is_shadow = false;
 
+static bool pw_locked  = false;
+static bool spw_locked = false;
+
 /* Options */
 static bool read_only = false;
 static bool sort_mode = false;
 static bool quiet = false;		/* don't report warnings, only errors */
 
 /* local function prototypes */
+static void fail_exit (int code);
 static void usage (void);
 static void process_flags (int argc, char **argv);
 static void open_files (void);
@@ -85,6 +90,31 @@
 static void check_spw_file (int *errors, bool *changed);
 
 /*
+ * fail_exit - do some cleanup and exit with the given error code
+ */
+static void fail_exit (int code)
+{
+	if (spw_locked) {
+		if (spw_unlock () == 0) {
+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+			SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+			/* continue */
+		}
+	}
+
+	if (pw_locked) {
+		if (pw_unlock () == 0) {
+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+			SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+			/* continue */
+		}
+	}
+
+	closelog ();
+
+	exit (code);
+}
+/*
  * usage - print syntax message and exit
  */
 static void usage (void)
@@ -172,17 +202,19 @@
 			if (use_system_pw_file) {
 				SYSLOG ((LOG_WARN, "cannot lock %s", pwd_file));
 			}
-			closelog ();
-			exit (E_CANTLOCK);
+			fail_exit (E_CANTLOCK);
 		}
-		if (is_shadow && (spw_lock () == 0)) {
-			fprintf (stderr, _("%s: cannot lock %s\n"),
-			         Prog, spw_file);
-			if (use_system_spw_file) {
-				SYSLOG ((LOG_WARN, "cannot lock %s", spw_file));
+		pw_locked = true;
+		if (is_shadow) {
+			if (spw_lock () == 0) {
+				fprintf (stderr, _("%s: cannot lock %s\n"),
+				         Prog, spw_file);
+				if (use_system_spw_file) {
+					SYSLOG ((LOG_WARN, "cannot lock %s", spw_file));
+				}
+				fail_exit (E_CANTLOCK);
 			}
-			closelog ();
-			exit (E_CANTLOCK);
+			spw_locked = true;
 		}
 	}
 
@@ -196,8 +228,7 @@
 		if (use_system_pw_file) {
 			SYSLOG ((LOG_WARN, "cannot open %s", pwd_file));
 		}
-		closelog ();
-		exit (E_CANTOPEN);
+		fail_exit (E_CANTOPEN);
 	}
 	if (is_shadow && (spw_open (read_only ? O_RDONLY : O_RDWR) == 0)) {
 		fprintf (stderr, _("%s: cannot open %s\n"),
@@ -205,8 +236,7 @@
 		if (use_system_spw_file) {
 			SYSLOG ((LOG_WARN, "cannot open %s", spw_file));
 		}
-		closelog ();
-		exit (E_CANTOPEN);
+		fail_exit (E_CANTOPEN);
 	}
 }
 
@@ -228,15 +258,13 @@
 			fprintf (stderr, _("%s: failure while writing changes to %s\n"),
 			         Prog, pwd_file);
 			SYSLOG ((LOG_WARN, "failure while writing changes to %s", pwd_file));
-			closelog ();
-			exit (E_CANTUPDATE);
+			fail_exit (E_CANTUPDATE);
 		}
 		if (is_shadow && (spw_close () == 0)) {
 			fprintf (stderr, _("%s: failure while writing changes to %s\n"),
 			         Prog, spw_file);
 			SYSLOG ((LOG_WARN, "failure while writing changes to %s", spw_file));
-			closelog ();
-			exit (E_CANTUPDATE);
+			fail_exit (E_CANTUPDATE);
 		}
 	}
 
@@ -244,9 +272,19 @@
 	 * Don't be anti-social - unlock the files when you're done.
 	 */
 	if (is_shadow) {
-		spw_unlock ();
+		if (spw_unlock () == 0) {
+			fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, spw_dbname ());
+			SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
+			/* continue */
+		}
 	}
-	(void) pw_unlock ();
+	spw_locked = false;
+	if (pw_unlock () == 0) {
+		fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, pw_dbname ());
+		SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
+		/* continue */
+	}
+	pw_locked = false;
 }
 
 /*
@@ -620,9 +658,19 @@
 	open_files ();
 
 	if (sort_mode) {
-		pw_sort ();
+		if (pw_sort () != 0) {
+			fprintf (stderr,
+			         _("%s: cannot sort entries in %s\n"),
+			         Prog, pw_dbname ());
+			fail_exit (E_CANTSORT);
+		}
 		if (is_shadow) {
-			spw_sort ();
+			if (spw_sort () != 0) {
+				fprintf (stderr,
+				         _("%s: cannot sort entries in %s\n"),
+				         Prog, spw_dbname ());
+				fail_exit (E_CANTSORT);
+			}
 		}
 		changed = true;
 	} else {




More information about the Pkg-shadow-commits mailing list