lslogins: conding style changes

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2014-05-16 11:31:00 +02:00
parent 68657ea2e7
commit 8b5e227978
1 changed files with 340 additions and 343 deletions

View File

@ -2,6 +2,7 @@
* lslogins - List information about users on the system
*
* Copyright (C) 2014 Ondrej Oprala <ooprala@redhat.com>
* Copyright (C) 2014 Karel Zak <kzak@redhat.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -39,7 +40,7 @@
#include <libsmartcols.h>
#ifdef HAVE_LIBSELINUX
#include <selinux/selinux.h>
# include <selinux/selinux.h>
#endif
#include "c.h"
@ -408,7 +409,6 @@ again:
return res;
}
static struct utmp *get_last_wtmp(struct lslogins_control *ctl, const char *username)
{
size_t n = 0;
@ -427,6 +427,7 @@ static struct utmp *get_last_wtmp(struct lslogins_control *ctl, const char *user
return NULL;
}
static struct utmp *get_last_btmp(struct lslogins_control *ctl, const char *username)
{
size_t n = 0;
@ -465,6 +466,7 @@ static int parse_btmp(struct lslogins_control *ctl, char *path)
err(EXIT_FAILURE, "%s", path);
return rc;
}
static int get_sgroups(gid_t **list, size_t *len, struct passwd *pwd)
{
size_t n = 0;
@ -489,11 +491,8 @@ static int get_sgroups(gid_t **list, size_t *len, struct passwd *pwd)
break;
++n;
}
(*list)[n] = (*list)[--(*len)];
/* probably too costly to do for sizeof(gid_t) worth of memory */
//*list = xrealloc(*list, *len * sizeof(gid_t));
return 0;
}
@ -527,8 +526,8 @@ static struct lslogins_user *get_user_info(struct lslogins_control *ctl, const c
errno = EAGAIN;
return NULL;
}
}
else if (lslogins_flag & F_SYSAC) {
} else if (lslogins_flag & F_SYSAC) {
if (uid < ctl->SYS_UID_MIN || uid > ctl->SYS_UID_MAX) {
errno = EAGAIN;
return NULL;
@ -555,8 +554,7 @@ static struct lslogins_user *get_user_info(struct lslogins_control *ctl, const c
if (!shadow) {
if (errno != EACCES)
err(EXIT_FAILURE, "%s", strerror(errno));
}
else {
} else {
/* we want these dates in seconds */
shadow->sp_lstchg *= 86400;
shadow->sp_expire *= 86400;
@ -564,132 +562,131 @@ static struct lslogins_user *get_user_info(struct lslogins_control *ctl, const c
while (n < ncolumns) {
switch (columns[n++]) {
case COL_LOGIN:
user->login = xstrdup(pwd->pw_name);
break;
case COL_UID:
user->uid = pwd->pw_uid;
break;
case COL_PGRP:
user->group = xstrdup(grp->gr_name);
break;
case COL_PGID:
user->gid = pwd->pw_gid;
break;
case COL_SGRPS:
case COL_SGIDS:
if (get_sgroups(&user->sgroups, &user->nsgroups, pwd))
err(EXIT_FAILURE, _("failed to get supplementary groups"));
break;
case COL_HOME:
user->homedir = xstrdup(pwd->pw_dir);
break;
case COL_SHELL:
user->shell = xstrdup(pwd->pw_shell);
break;
case COL_GECOS:
user->gecos = xstrdup(pwd->pw_gecos);
break;
case COL_LAST_LOGIN:
if (user_wtmp) {
time = user_wtmp->ut_tv.tv_sec;
user->last_login = make_time(ctl->time_mode, time);
}
break;
case COL_LAST_TTY:
if (user_wtmp)
user->last_tty = xstrdup(user_wtmp->ut_line);
break;
case COL_LAST_HOSTNAME:
if (user_wtmp)
user->last_hostname = xstrdup(user_wtmp->ut_host);
break;
case COL_FAILED_LOGIN:
if (user_btmp) {
time = user_btmp->ut_tv.tv_sec;
user->failed_login = make_time(ctl->time_mode, time);
}
break;
case COL_FAILED_TTY:
if (user_btmp)
user->failed_tty = xstrdup(user_btmp->ut_line);
break;
case COL_HUSH_STATUS:
user->hushed = get_hushlogin_status(pwd, 0);
if (user->hushed == -1)
user->hushed = STATUS_UNKNOWN;
break;
case COL_NOPASSWD:
if (shadow) {
if (!*shadow->sp_pwdp) /* '\0' */
user->nopasswd = STATUS_TRUE;
} else
user->nopasswd = STATUS_UNKNOWN;
break;
case COL_NOLOGIN:
if ((pwd->pw_uid && !(close(open("/etc/nologin", O_RDONLY)))) ||
strstr(pwd->pw_shell, "nologin")) {
user->nologin = 1;
}
break;
case COL_LOCKED:
if (shadow) {
if (*shadow->sp_pwdp == '!')
user->locked = STATUS_TRUE;
} else
user->locked = STATUS_UNKNOWN;
break;
case COL_PWD_WARN:
if (shadow && shadow->sp_warn >= 0)
xasprintf(&user->pwd_warn, "%ld", shadow->sp_warn);
break;
case COL_PWD_EXPIR:
if (shadow && shadow->sp_expire >= 0)
user->pwd_expire = make_time(TIME_SHORT, shadow->sp_expire);
break;
case COL_PWD_CTIME:
/* sp_lstchg is specified in days, showing hours (especially in non-GMT
* timezones) would only serve to confuse */
if (shadow)
user->pwd_ctime = make_time(TIME_SHORT, shadow->sp_lstchg);
break;
case COL_PWD_CTIME_MIN:
if (shadow) {
if (shadow->sp_min <= 0)
user->pwd_ctime_min = xstrdup("unlimited");
else
xasprintf(&user->pwd_ctime_min, "%ld", shadow->sp_min);
}
break;
case COL_PWD_CTIME_MAX:
if (shadow) {
if (shadow->sp_max <= 0)
user->pwd_ctime_max = xstrdup("unlimited");
else
xasprintf(&user->pwd_ctime_max, "%ld", shadow->sp_max);
}
break;
case COL_SELINUX:
{
#ifdef HAVE_LIBSELINUX
/* typedefs and pointers are pure evil */
security_context_t con = NULL;
if (getcon(&con) == 0)
user->context = con;
#endif
case COL_LOGIN:
user->login = xstrdup(pwd->pw_name);
break;
case COL_UID:
user->uid = pwd->pw_uid;
break;
case COL_PGRP:
user->group = xstrdup(grp->gr_name);
break;
case COL_PGID:
user->gid = pwd->pw_gid;
break;
case COL_SGRPS:
case COL_SGIDS:
if (get_sgroups(&user->sgroups, &user->nsgroups, pwd))
err(EXIT_FAILURE, _("failed to get supplementary groups"));
break;
case COL_HOME:
user->homedir = xstrdup(pwd->pw_dir);
break;
case COL_SHELL:
user->shell = xstrdup(pwd->pw_shell);
break;
case COL_GECOS:
user->gecos = xstrdup(pwd->pw_gecos);
break;
case COL_LAST_LOGIN:
if (user_wtmp) {
time = user_wtmp->ut_tv.tv_sec;
user->last_login = make_time(ctl->time_mode, time);
}
break;
default:
/* something went very wrong here */
err(EXIT_FAILURE, "fatal: unknown error");
break;
case COL_LAST_TTY:
if (user_wtmp)
user->last_tty = xstrdup(user_wtmp->ut_line);
break;
case COL_LAST_HOSTNAME:
if (user_wtmp)
user->last_hostname = xstrdup(user_wtmp->ut_host);
break;
case COL_FAILED_LOGIN:
if (user_btmp) {
time = user_btmp->ut_tv.tv_sec;
user->failed_login = make_time(ctl->time_mode, time);
}
break;
case COL_FAILED_TTY:
if (user_btmp)
user->failed_tty = xstrdup(user_btmp->ut_line);
break;
case COL_HUSH_STATUS:
user->hushed = get_hushlogin_status(pwd, 0);
if (user->hushed == -1)
user->hushed = STATUS_UNKNOWN;
break;
case COL_NOPASSWD:
if (shadow) {
if (!*shadow->sp_pwdp) /* '\0' */
user->nopasswd = STATUS_TRUE;
} else
user->nopasswd = STATUS_UNKNOWN;
break;
case COL_NOLOGIN:
if ((pwd->pw_uid && !(close(open("/etc/nologin", O_RDONLY)))) ||
strstr(pwd->pw_shell, "nologin")) {
user->nologin = 1;
}
break;
case COL_LOCKED:
if (shadow) {
if (*shadow->sp_pwdp == '!')
user->locked = STATUS_TRUE;
} else
user->locked = STATUS_UNKNOWN;
break;
case COL_PWD_WARN:
if (shadow && shadow->sp_warn >= 0)
xasprintf(&user->pwd_warn, "%ld", shadow->sp_warn);
break;
case COL_PWD_EXPIR:
if (shadow && shadow->sp_expire >= 0)
user->pwd_expire = make_time(TIME_SHORT, shadow->sp_expire);
break;
case COL_PWD_CTIME:
/* sp_lstchg is specified in days, showing hours (especially in non-GMT
* timezones) would only serve to confuse */
if (shadow)
user->pwd_ctime = make_time(TIME_SHORT, shadow->sp_lstchg);
break;
case COL_PWD_CTIME_MIN:
if (shadow) {
if (shadow->sp_min <= 0)
user->pwd_ctime_min = xstrdup("unlimited");
else
xasprintf(&user->pwd_ctime_min, "%ld", shadow->sp_min);
}
break;
case COL_PWD_CTIME_MAX:
if (shadow) {
if (shadow->sp_max <= 0)
user->pwd_ctime_max = xstrdup("unlimited");
else
xasprintf(&user->pwd_ctime_max, "%ld", shadow->sp_max);
}
break;
case COL_SELINUX:
{
#ifdef HAVE_LIBSELINUX
/* typedefs and pointers are pure evil */
security_context_t con = NULL;
if (getcon(&con) == 0)
user->context = con;
#endif
}
break;
default:
/* something went very wrong here */
err(EXIT_FAILURE, "fatal: unknown error");
}
}
/* 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 */
} else /* sorting by UID */
user->uid = pwd->pw_uid;
return user;
@ -723,6 +720,7 @@ static int str_to_uint(char *s, unsigned int *ul)
return 0;
return 1;
}
static int get_ulist(struct lslogins_control *ctl, char *logins, char *groups)
{
char *u, *g;
@ -816,6 +814,7 @@ static int get_user(struct lslogins_control *ctl, struct lslogins_user **user, c
return -1;
return 0;
}
static int create_usertree(struct lslogins_control *ctl)
{
struct lslogins_user *user = NULL;
@ -829,8 +828,7 @@ static int create_usertree(struct lslogins_control *ctl)
tsearch(user, &ctl->usertree, ctl->cmp_fn);
++n;
}
}
else {
} else {
while ((user = get_next_user(ctl)))
tsearch(user, &ctl->usertree, ctl->cmp_fn);
}
@ -858,26 +856,26 @@ static struct libscols_table *setup_table(void)
return NULL;
switch(outmode) {
case out_colon:
scols_table_enable_raw(tb, 1);
scols_table_set_column_separator(tb, ":");
break;
case out_newline:
scols_table_set_column_separator(tb, "\n");
/* fallthrough */
case out_export:
scols_table_enable_export(tb, 1);
break;
case out_nul:
scols_table_set_line_separator(tb, "\0");
/* fallthrough */
case out_raw:
scols_table_enable_raw(tb, 1);
break;
case out_pretty:
scols_table_enable_noheadings(tb, 1);
default:
break;
case out_colon:
scols_table_enable_raw(tb, 1);
scols_table_set_column_separator(tb, ":");
break;
case out_newline:
scols_table_set_column_separator(tb, "\n");
/* fallthrough */
case out_export:
scols_table_enable_export(tb, 1);
break;
case out_nul:
scols_table_set_line_separator(tb, "\0");
/* fallthrough */
case out_raw:
scols_table_enable_raw(tb, 1);
break;
case out_pretty:
scols_table_enable_noheadings(tb, 1);
default:
break;
}
while (n < ncolumns) {
@ -907,89 +905,89 @@ static void fill_table(const void *u, const VISIT which, const int depth __attri
int rc = 0;
switch (columns[n]) {
case COL_LOGIN:
rc = scols_line_set_data(ln, n, user->login);
break;
case COL_UID:
rc = scols_line_refer_data(ln, n, uidtostr(user->uid));
break;
case COL_NOPASSWD:
rc = scols_line_set_data(ln, n, status[user->nopasswd]);
break;
case COL_NOLOGIN:
rc = scols_line_set_data(ln, n, status[user->nologin]);
break;
case COL_LOCKED:
rc = scols_line_set_data(ln, n, status[user->locked]);
break;
case COL_PGRP:
rc = scols_line_set_data(ln, n, user->group);
break;
case COL_PGID:
rc = scols_line_refer_data(ln, n, gidtostr(user->gid));
break;
case COL_SGRPS:
rc = scols_line_refer_data(ln, n,
build_sgroups_string(user->sgroups,
user->nsgroups,
TRUE));
break;
case COL_SGIDS:
rc = scols_line_refer_data(ln, n,
build_sgroups_string(user->sgroups,
user->nsgroups,
FALSE));
break;
case COL_HOME:
rc = scols_line_set_data(ln, n, user->homedir);
break;
case COL_SHELL:
rc = scols_line_set_data(ln, n, user->shell);
break;
case COL_GECOS:
rc = scols_line_set_data(ln, n, user->gecos);
break;
case COL_LAST_LOGIN:
rc = scols_line_set_data(ln, n, user->last_login);
break;
case COL_LAST_TTY:
rc = scols_line_set_data(ln, n, user->last_tty);
break;
case COL_LAST_HOSTNAME:
rc = scols_line_set_data(ln, n, user->last_hostname);
break;
case COL_FAILED_LOGIN:
rc = scols_line_set_data(ln, n, user->failed_login);
break;
case COL_FAILED_TTY:
rc = scols_line_set_data(ln, n, user->failed_tty);
break;
case COL_HUSH_STATUS:
rc= scols_line_set_data(ln, n, status[user->hushed]);
break;
case COL_PWD_WARN:
rc = scols_line_set_data(ln, n, user->pwd_warn);
break;
case COL_PWD_EXPIR:
rc = scols_line_set_data(ln, n, user->pwd_expire);
break;
case COL_PWD_CTIME:
rc = scols_line_set_data(ln, n, user->pwd_ctime);
break;
case COL_PWD_CTIME_MIN:
rc = scols_line_set_data(ln, n, user->pwd_ctime_min);
break;
case COL_PWD_CTIME_MAX:
rc = scols_line_set_data(ln, n, user->pwd_ctime_max);
break;
case COL_LOGIN:
rc = scols_line_set_data(ln, n, user->login);
break;
case COL_UID:
rc = scols_line_refer_data(ln, n, uidtostr(user->uid));
break;
case COL_NOPASSWD:
rc = scols_line_set_data(ln, n, status[user->nopasswd]);
break;
case COL_NOLOGIN:
rc = scols_line_set_data(ln, n, status[user->nologin]);
break;
case COL_LOCKED:
rc = scols_line_set_data(ln, n, status[user->locked]);
break;
case COL_PGRP:
rc = scols_line_set_data(ln, n, user->group);
break;
case COL_PGID:
rc = scols_line_refer_data(ln, n, gidtostr(user->gid));
break;
case COL_SGRPS:
rc = scols_line_refer_data(ln, n,
build_sgroups_string(user->sgroups,
user->nsgroups,
TRUE));
break;
case COL_SGIDS:
rc = scols_line_refer_data(ln, n,
build_sgroups_string(user->sgroups,
user->nsgroups,
FALSE));
break;
case COL_HOME:
rc = scols_line_set_data(ln, n, user->homedir);
break;
case COL_SHELL:
rc = scols_line_set_data(ln, n, user->shell);
break;
case COL_GECOS:
rc = scols_line_set_data(ln, n, user->gecos);
break;
case COL_LAST_LOGIN:
rc = scols_line_set_data(ln, n, user->last_login);
break;
case COL_LAST_TTY:
rc = scols_line_set_data(ln, n, user->last_tty);
break;
case COL_LAST_HOSTNAME:
rc = scols_line_set_data(ln, n, user->last_hostname);
break;
case COL_FAILED_LOGIN:
rc = scols_line_set_data(ln, n, user->failed_login);
break;
case COL_FAILED_TTY:
rc = scols_line_set_data(ln, n, user->failed_tty);
break;
case COL_HUSH_STATUS:
rc= scols_line_set_data(ln, n, status[user->hushed]);
break;
case COL_PWD_WARN:
rc = scols_line_set_data(ln, n, user->pwd_warn);
break;
case COL_PWD_EXPIR:
rc = scols_line_set_data(ln, n, user->pwd_expire);
break;
case COL_PWD_CTIME:
rc = scols_line_set_data(ln, n, user->pwd_ctime);
break;
case COL_PWD_CTIME_MIN:
rc = scols_line_set_data(ln, n, user->pwd_ctime_min);
break;
case COL_PWD_CTIME_MAX:
rc = scols_line_set_data(ln, n, user->pwd_ctime_max);
break;
#ifdef HAVE_LIBSELINUX
case COL_SELINUX:
rc = scols_line_set_data(ln, n, user->context);
break;
case COL_SELINUX:
rc = scols_line_set_data(ln, n, user->context);
break;
#endif
default:
/* something went very wrong here */
err(EXIT_FAILURE, _("internal error: unknown column"));
default:
/* something went very wrong here */
err(EXIT_FAILURE, _("internal error: unknown column"));
}
if (rc != 0)
@ -998,6 +996,7 @@ static void fill_table(const void *u, const VISIT which, const int depth __attri
}
return;
}
static int print_pretty(struct libscols_table *tb)
{
struct libscols_iter *itr = scols_new_iter(SCOLS_ITER_FORWARD);
@ -1023,6 +1022,7 @@ static int print_pretty(struct libscols_table *tb)
return 0;
}
static int print_user_table(struct lslogins_control *ctl)
{
tb = setup_table();
@ -1061,10 +1061,12 @@ static void free_user(void *f)
#endif
free(u);
}
struct lslogins_timefmt {
const char *name;
int val;
};
static struct lslogins_timefmt timefmts[] = {
{ "short", TIME_SHORT_RELATIVE },
{ "full", TIME_FULL },
@ -1144,112 +1146,112 @@ int main(int argc, char *argv[])
err_exclusive_options(c, longopts, excl, excl_st);
switch (c) {
case 'a':
lslogins_flag |= F_EXPIR;
break;
case 'c':
outmode = out_colon;
break;
case 'e':
outmode = out_export;
break;
case 'f':
lslogins_flag |= F_FAIL;
break;
case 'g':
groups = optarg;
break;
case 'h':
usage(stdout);
case 'i':
ctl->time_mode = TIME_ISO;
break;
case 'l':
logins = optarg;
break;
case 'm':
lslogins_flag |= F_MORE;
break;
case 'n':
outmode = out_newline;
break;
case 'o':
if (optarg) {
if (*optarg == '=')
optarg++;
ncolumns = string_to_idarray(optarg,
columns, ARRAY_SIZE(columns),
column_name_to_id);
if (ncolumns < 0)
return EXIT_FAILURE;
}
break;
case 'r':
outmode = out_raw;
break;
case OPT_LAST:
lslogins_flag |= F_LAST;
break;
case 's':
ctl->SYS_UID_MIN = getlogindefs_num("SYS_UID_MIN", UL_SYS_UID_MIN);
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);
lslogins_flag |= F_USRAC;
break;
case OPT_VER:
printf(_("%s from %s\n"), program_invocation_short_name,
PACKAGE_STRING);
return EXIT_SUCCESS;
case 'x':
lslogins_flag |= F_EXTRA;
break;
case 'z':
outmode = out_nul;
break;
case OPT_WTMP:
path_wtmp = optarg;
break;
case OPT_BTMP:
path_btmp = optarg;
break;
case OPT_NOTRUNC:
coldescs[COL_GECOS].flag = 0;
break;
case OPT_FULLT:
ctl->time_mode = TIME_FULL;
break;
case OPT_TIME_FMT:
{
size_t i;
case 'a':
lslogins_flag |= F_EXPIR;
break;
case 'c':
outmode = out_colon;
break;
case 'e':
outmode = out_export;
break;
case 'f':
lslogins_flag |= F_FAIL;
break;
case 'g':
groups = optarg;
break;
case 'h':
usage(stdout);
case 'i':
ctl->time_mode = TIME_ISO;
break;
case 'l':
logins = optarg;
break;
case 'm':
lslogins_flag |= F_MORE;
break;
case 'n':
outmode = out_newline;
break;
case 'o':
if (optarg) {
if (*optarg == '=')
optarg++;
ncolumns = string_to_idarray(optarg,
columns, ARRAY_SIZE(columns),
column_name_to_id);
if (ncolumns < 0)
return EXIT_FAILURE;
}
break;
case 'r':
outmode = out_raw;
break;
case OPT_LAST:
lslogins_flag |= F_LAST;
break;
case 's':
ctl->SYS_UID_MIN = getlogindefs_num("SYS_UID_MIN", UL_SYS_UID_MIN);
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);
lslogins_flag |= F_USRAC;
break;
case OPT_VER:
printf(_("%s from %s\n"), program_invocation_short_name,
PACKAGE_STRING);
return EXIT_SUCCESS;
case 'x':
lslogins_flag |= F_EXTRA;
break;
case 'z':
outmode = out_nul;
break;
case OPT_WTMP:
path_wtmp = optarg;
break;
case OPT_BTMP:
path_btmp = optarg;
break;
case OPT_NOTRUNC:
coldescs[COL_GECOS].flag = 0;
break;
case OPT_FULLT:
ctl->time_mode = TIME_FULL;
break;
case OPT_TIME_FMT:
{
size_t i;
for (i = 0; i < ARRAY_SIZE(timefmts); i++) {
if (strcmp(timefmts[i].name, optarg) == 0) {
ctl->time_mode = timefmts[i].val;
break;
}
for (i = 0; i < ARRAY_SIZE(timefmts); i++) {
if (strcmp(timefmts[i].name, optarg) == 0) {
ctl->time_mode = timefmts[i].val;
break;
}
if (ctl->time_mode == TIME_INVALID)
usage(stderr);
}
break;
case 'Z':
if (ctl->time_mode == TIME_INVALID)
usage(stderr);
}
break;
case 'Z':
#ifdef HAVE_LIBSELINUX
lslogins_flag |= F_SELINUX;
ctl->sel_enabled = is_selinux_enabled();
if (ctl->sel_enabled == -1)
exit(1);
lslogins_flag |= F_SELINUX;
ctl->sel_enabled = is_selinux_enabled();
if (ctl->sel_enabled == -1)
exit(1);
#endif
break;
default:
usage(stderr);
break;
default:
usage(stderr);
}
}
@ -1258,8 +1260,7 @@ int main(int argc, char *argv[])
err(EXIT_FAILURE, "%s", "Only one user may be specified. Use -l for multiple users");
logins = argv[optind];
outmode = out_pretty;
}
else if (argc != optind)
} else if (argc != optind)
usage(stderr);
/* lslogins -u -s == lslogins */
@ -1270,8 +1271,7 @@ int main(int argc, char *argv[])
if (lslogins_flag & F_SORT) {
columns[ncolumns++] = COL_LOGIN;
columns[ncolumns++] = COL_UID;
}
else {
} else {
columns[ncolumns++] = COL_UID;
columns[ncolumns++] = COL_LOGIN;
}
@ -1281,12 +1281,10 @@ int main(int argc, char *argv[])
want_wtmp = 1;
if (lslogins_flag & F_NOPWD) {
if (lslogins_flag & F_NOPWD)
columns[ncolumns++] = COL_NOPASSWD;
}
if (lslogins_flag & F_MORE) {
if (lslogins_flag & F_MORE)
columns[ncolumns++] = COL_SGRPS;
}
if (lslogins_flag & F_EXPIR) {
columns[ncolumns++] = COL_PWD_CTIME;
columns[ncolumns++] = COL_PWD_EXPIR;
@ -1314,8 +1312,7 @@ int main(int argc, char *argv[])
}
if (lslogins_flag & F_SELINUX)
columns[ncolumns++] = COL_SELINUX;
}
else {
} else {
int n = 0, i;
while (n < ncolumns) {
i = columns[n++];