Alphabetically sort the output of lastlogin(8).
According to the manpage, the entries have to be sorted by uid. This is no longer possible, since our utmpx implementation is completely unaware of user IDs. You can safely add entries for multiple users sharing the same uid. Make the output less random by sorting everything by name.
This commit is contained in:
parent
d8c136591a
commit
aacd7d6afc
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=206471
@ -55,7 +55,7 @@ If more than one
|
||||
is given, the session information for each user is printed in
|
||||
the order given on the command line.
|
||||
Otherwise, information
|
||||
for all users is printed, sorted by uid.
|
||||
for all users is printed, sorted by name.
|
||||
.Pp
|
||||
The
|
||||
.Nm
|
||||
|
@ -39,6 +39,7 @@ __RCSID("$NetBSD: lastlogin.c,v 1.4 1998/02/03 04:45:35 perry Exp $");
|
||||
#include <err.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <utmpx.h>
|
||||
@ -47,11 +48,19 @@ __RCSID("$NetBSD: lastlogin.c,v 1.4 1998/02/03 04:45:35 perry Exp $");
|
||||
static void output(struct utmpx *);
|
||||
static void usage(void);
|
||||
|
||||
static int
|
||||
utcmp(const void *u1, const void *u2)
|
||||
{
|
||||
|
||||
return (strcmp(((const struct utmpx *)u1)->ut_user,
|
||||
((const struct utmpx *)u2)->ut_user));
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int ch, i;
|
||||
struct utmpx *u;
|
||||
int ch, i, ulistsize;
|
||||
struct utmpx *u, *ulist;
|
||||
|
||||
while ((ch = getopt(argc, argv, "")) != -1) {
|
||||
usage();
|
||||
@ -74,12 +83,21 @@ main(int argc, char *argv[])
|
||||
else {
|
||||
if (setutxdb(UTXDB_LASTLOGIN, NULL) != 0)
|
||||
errx(1, "failed to open lastlog database");
|
||||
ulist = NULL;
|
||||
ulistsize = 0;
|
||||
while ((u = getutxent()) != NULL) {
|
||||
if (u->ut_type != USER_PROCESS)
|
||||
continue;
|
||||
output(u);
|
||||
if ((ulistsize % 16) == 0)
|
||||
ulist = realloc(ulist,
|
||||
(ulistsize + 16) * sizeof(struct utmpx));
|
||||
ulist[ulistsize++] = *u;
|
||||
}
|
||||
endutxent();
|
||||
|
||||
qsort(ulist, ulistsize, sizeof(struct utmpx), utcmp);
|
||||
for (i = 0; i < ulistsize; i++)
|
||||
output(&ulist[i]);
|
||||
}
|
||||
|
||||
exit(0);
|
||||
|
Loading…
Reference in New Issue
Block a user