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

nekral-guest at alioth.debian.org nekral-guest at alioth.debian.org
Wed Dec 26 21:54:04 UTC 2007


Author: nekral-guest
Date: 2007-12-26 21:54:04 +0000 (Wed, 26 Dec 2007)
New Revision: 1497

Modified:
   upstream/trunk/ChangeLog
   upstream/trunk/NEWS
   upstream/trunk/TODO
   upstream/trunk/man/lastlog.8.xml
   upstream/trunk/src/lastlog.c
Log:
Merge Debian's patch 412_lastlog_-u_numerical_range
* NEWS, src/lastlog.c, man/lastlog.8.xml: Accept numerical user, or
  ranges with the -u option.
* TODO: The same change should be done on faillog.


Modified: upstream/trunk/ChangeLog
===================================================================
--- upstream/trunk/ChangeLog	2007-12-26 16:50:38 UTC (rev 1496)
+++ upstream/trunk/ChangeLog	2007-12-26 21:54:04 UTC (rev 1497)
@@ -1,5 +1,11 @@
 2007-12-26  Nicolas François  <nicolas.francois at centraliens.net>
 
+	Merge Debian's patch 412_lastlog_-u_numerical_range
+	* NEWS, src/lastlog.c, man/lastlog.8.xml: Accept numerical user, or
+	ranges with the -u option.
+
+2007-12-26  Nicolas François  <nicolas.francois at centraliens.net>
+
 	Merge Debian's patch 466_fflush-prompt
 	* libmisc/Makefile.am, lib/prototypes.h, libmisc/yesno.c, src/grpck.c,
 	src/pwck.c: move yes_or_no() from grpck/pwck to a separate

Modified: upstream/trunk/NEWS
===================================================================
--- upstream/trunk/NEWS	2007-12-26 16:50:38 UTC (rev 1496)
+++ upstream/trunk/NEWS	2007-12-26 21:54:04 UTC (rev 1497)
@@ -13,6 +13,9 @@
 - su
   * su's arguments are now reordered. If needed, use -- to separate su's
     options from the shell's options.
+- lastlog
+  * Accept users specified as a numerical UID, or ranges of users (-user,
+    user-, user1-user2).
 
 shadow-4.0.18.2 -> shadow-4.1.0						09-12-2008
 

Modified: upstream/trunk/TODO
===================================================================
--- upstream/trunk/TODO	2007-12-26 16:50:38 UTC (rev 1496)
+++ upstream/trunk/TODO	2007-12-26 21:54:04 UTC (rev 1497)
@@ -1,3 +1,6 @@
+faillog
+ - accept numerical user and range of users
+
 Document when/where option appeared, document whether an option is standard
 or not.
 

Modified: upstream/trunk/man/lastlog.8.xml
===================================================================
--- upstream/trunk/man/lastlog.8.xml	2007-12-26 16:50:38 UTC (rev 1496)
+++ upstream/trunk/man/lastlog.8.xml	2007-12-26 21:54:04 UTC (rev 1497)
@@ -71,25 +71,23 @@
       <varlistentry>
 	<term>
 	  <option>-u</option>, <option>--user</option>
-	  <replaceable>LOGIN</replaceable>
+	  <replaceable>LOGIN</replaceable>|<replaceable>RANGE</replaceable>
 	</term>
 	<listitem>
-	  <para>Print the lastlog record for user with specified
-	    <emphasis remap='I'>LOGIN</emphasis> only.
+	  <para>
+	    Print the lastlog record of the specified user(s).
 	  </para>
+	  <para>
+	    The users can be specified by a login name, a numerical user ID,
+	    or a <replaceable>RANGE</replaceable> of users. This
+	    <replaceable>RANGE</replaceable> of users can be specified with a
+	    min and max values (<replaceable>UID_MIN-UID_MAX</replaceable>), a
+	    max value (<replaceable>-UID_MAX</replaceable>), or a min value
+	    (<replaceable>UID_MIN-</replaceable>).
+	  </para>
 	</listitem>
       </varlistentry>
     </variablelist>
-    <variablelist remap='TP'>
-      <varlistentry>
-	<term>
-	  The <option>-t</option> flag overrides the use of <option>-u</option>.
-	</term>
-	<listitem>
-	  <para></para>
-	</listitem>
-      </varlistentry>
-    </variablelist>
 
     <para>
       If the user has never logged in the message <emphasis>** Never logged

Modified: upstream/trunk/src/lastlog.c
===================================================================
--- upstream/trunk/src/lastlog.c	2007-12-26 16:50:38 UTC (rev 1496)
+++ upstream/trunk/src/lastlog.c	2007-12-26 21:54:04 UTC (rev 1497)
@@ -50,14 +50,15 @@
  * Global variables
  */
 static FILE *lastlogfile;	/* lastlog file stream */
-static off_t user;		/* one single user, specified on command line */
+static long umin;		/* if uflg, only display users with uid >= umin */
+static long umax;		/* if uflg, only display users with uid <= umax */
 static int days;		/* number of days to consider for print command */
 static time_t seconds;		/* that number of days in seconds */
 static int inverse_days;	/* number of days to consider for print command */
 static time_t inverse_seconds;	/* that number of days in seconds */
 
 
-static int uflg = 0;		/* set if user is a valid user id */
+static int uflg = 0;		/* print only an user of range of users */
 static int tflg = 0;		/* print is restricted to most recent days */
 static int bflg = 0;		/* print excludes most recent days */
 static struct lastlog lastlog;	/* scratch structure to play with ... */
@@ -127,26 +128,14 @@
 {
 	off_t offset;
 
-	if (uflg) {
-		offset = user * sizeof lastlog;
-
-		if (fstat (fileno (lastlogfile), &statbuf)) {
-			perror (LASTLOG_FILE);
-			return;
-		}
-		if (offset >= statbuf.st_size)
-			return;
-
-		fseeko (lastlogfile, offset, SEEK_SET);
-		if (fread ((char *) &lastlog, sizeof lastlog, 1,
-			   lastlogfile) == 1)
-			print_one (pwent);
-		else
-			perror (LASTLOG_FILE);
-	} else {
+	{
 		setpwent ();
 		while ((pwent = getpwent ())) {
 			user = pwent->pw_uid;
+			if (uflg &&
+			    ((umin != -1 && user < umin) ||
+			     (umax != -1 && user > umax)))
+				continue;
 			offset = user * sizeof lastlog;
 
 			fseeko (lastlogfile, offset, SEEK_SET);
@@ -199,15 +188,46 @@
 				bflg++;
 				break;
 			case 'u':
+				/*
+				 * The user can be:
+				 *  - a login name
+				 *  - numerical
+				 *  - a numerical login ID
+				 *  - a range (-x, x-, x-y)
+				 */
+				uflg++;
 				pwent = xgetpwnam (optarg);
-				if (!pwent) {
-					fprintf (stderr,
-						 _("Unknown User: %s\n"),
-						 optarg);
-					exit (1);
+				if (NULL != pwent) {
+					umin = pwent->pw_uid;
+					umax = umin;
+				} else {
+					char *endptr = NULL;
+					user = strtol(optarg, &endptr, 10);
+					if (*optarg != '\0' && *endptr == '\0') {
+						if (user < 0) {
+							/* -<userid> */
+							umin = -1;
+							umax = -user;
+						} else {
+							/* <userid> */
+							umin = user;
+							umax = user;
+						}
+					} else if (endptr[0] == '-' && endptr[1] == '\0') {
+						/* <userid>- */
+						umin = user;
+						umax = -1;
+					} else if (*endptr == '-') {
+						/* <userid>-<userid> */
+						umin = user;
+						umax = atol(endptr+1);
+					} else {
+						fprintf (stderr,
+							 _("Unknown user or range: %s\n"),
+							 optarg);
+						exit (1);
+					}
 				}
-				uflg++;
-				user = pwent->pw_uid;
 				break;
 			default:
 				usage ();




More information about the Pkg-shadow-commits mailing list