F_NOPWD = (1 << 2),
F_SYSAC = (1 << 3),
F_USRAC = (1 << 4),
- F_SORT = (1 << 5),
- F_EXTRA = (1 << 6),
- F_FAIL = (1 << 7),
- F_LAST = (1 << 8),
- F_SELINUX = (1 << 9),
+ F_EXTRA = (1 << 5),
+ F_FAIL = (1 << 6),
+ F_LAST = (1 << 7),
+ F_SELINUX = (1 << 8),
};
/*
uid_t SYS_UID_MIN;
uid_t SYS_UID_MAX;
- int (*cmp_fn) (const void *a, const void *b);
-
char **ulist;
size_t ulsiz;
}
} else if ((lslogins_flag & F_SYSAC) &&
- uid < ctl->SYS_UID_MIN || uid > ctl->SYS_UID_MAX) {
+ (uid < ctl->SYS_UID_MIN || uid > ctl->SYS_UID_MAX)) {
errno = EAGAIN;
return NULL;
}
shadow = getspnam(pwd->pw_name);
ulckpwdf();
+ /* required by tseach() stuff */
+ user->uid = pwd->pw_uid;
+
while (n < ncolumns) {
switch (columns[n++]) {
case COL_LOGIN:
case COL_NOLOGIN:
if (strstr(pwd->pw_shell, "nologin"))
user->nologin = 1;
- else if (pwd->uid) {
+ else if (pwd->pw_uid) {
user->nologin = access("/etc/nologin", F_OK) ||
access("/var/run/nologin", F_OK);
}
break;
}
}
- /* check if we have the info needed to sort */
- if (lslogins_flag & F_SORT) { /* sorting by username */
- if (!user->login)
- user->login = xstrdup(pwd->pw_name);
- } else /* sorting by UID */
- user->uid = pwd->pw_uid;
return user;
}
#define IS_REAL_ERRNO(e) !((e) == ENOENT || (e) == ESRCH || \
(e) == EBADF || (e) == EPERM || (e) == EAGAIN)
-/*
-static void *user_in_tree(void **rootp, struct lslogins_user *u)
-{
- void *rc;
- rc = tfind(u, rootp, ctl->cmp_fn);
- if (!rc)
- tdelete(u, rootp, ctl->cmp_fn);
- return rc;
-}
-*/
-
/* get a definitive list of users we want info about... */
static int str_to_uint(char *s, unsigned int *ul)
return 0;
}
+static int cmp_uid(const void *a, const void *b)
+{
+ uid_t x = ((struct lslogins_user *)a)->uid;
+ uid_t z = ((struct lslogins_user *)b)->uid;
+ return x > z ? 1 : (x < z ? -1 : 0);
+}
+
static int create_usertree(struct lslogins_control *ctl)
{
struct lslogins_user *user = NULL;
if (get_user(ctl, &user, ctl->ulist[n]))
return -1;
if (user) /* otherwise an invalid user name has probably been given */
- tsearch(user, &ctl->usertree, ctl->cmp_fn);
+ tsearch(user, &ctl->usertree, cmp_uid);
++n;
}
} else {
while ((user = get_next_user(ctl)))
- tsearch(user, &ctl->usertree, ctl->cmp_fn);
+ tsearch(user, &ctl->usertree, cmp_uid);
}
return 0;
}
-static int cmp_uname(const void *a, const void *b)
-{
- return strcmp(((struct lslogins_user *)a)->login,
- ((struct lslogins_user *)b)->login);
-}
-
-static int cmp_uid(const void *a, const void *b)
-{
- uid_t x = ((struct lslogins_user *)a)->uid;
- uid_t z = ((struct lslogins_user *)b)->uid;
- return x > z ? 1 : (x < z ? -1 : 0);
-}
-
static struct libscols_table *setup_table(void)
{
struct libscols_table *tb = scols_new_table();
fputs(_(" -o, --output[=<list>] Define the columns to output\n"), out);
fputs(_(" -r, --raw Display the raw table\n"), out);
fputs(_(" -s, --system-accs Display system accounts\n"), out);
- fputs(_(" -t, --sort-by-name Sort output by login instead of UID\n"), out);
fputs(_(" --time-format=<type> Display dates in short, full or iso format\n"), out);
fputs(_(" -u, --user-accs Display user accounts\n"), out);
fputs(_(" -x, --extra Display extra information\n"), out);
{ "last", no_argument, 0, OPT_LAST },
{ "raw", no_argument, 0, 'r' },
{ "system-accs", no_argument, 0, 's' },
- { "sort-by-name", no_argument, 0, 't' },
{ "time-format", required_argument, 0, OPT_TIME_FMT },
{ "user-accs", no_argument, 0, 'u' },
{ "version", no_argument, 0, OPT_VER },
textdomain(PACKAGE);
atexit(close_stdout);
- ctl->cmp_fn = cmp_uid;
ctl->time_mode = TIME_SHORT_RELATIVE;
- while ((c = getopt_long(argc, argv, "acefg:hl:mno:rstuxzZ",
+ while ((c = getopt_long(argc, argv, "acefg:hl:mno:rsuxzZ",
longopts, NULL)) != -1) {
err_exclusive_options(c, longopts, excl, excl_st);
ctl->SYS_UID_MAX = getlogindefs_num("SYS_UID_MAX", UL_SYS_UID_MAX);
lslogins_flag |= F_SYSAC;
break;
- case 't':
- ctl->cmp_fn = cmp_uname;
- lslogins_flag |= F_SORT;
- break;
case 'u':
ctl->UID_MIN = getlogindefs_num("UID_MIN", UL_UID_MIN);
ctl->UID_MAX = getlogindefs_num("UID_MAX", UL_UID_MAX);
columns[ncolumns++] = i;
} else if (!ncolumns) {
- if (lslogins_flag & F_SORT) {
- columns[ncolumns++] = COL_LOGIN;
- columns[ncolumns++] = COL_UID;
- } else {
- columns[ncolumns++] = COL_UID;
- columns[ncolumns++] = COL_LOGIN;
- }
+ columns[ncolumns++] = COL_UID;
+ columns[ncolumns++] = COL_LOGIN;
columns[ncolumns++] = COL_PGRP;
columns[ncolumns++] = COL_PGID;
columns[ncolumns++] = COL_LAST_LOGIN;