w: new applet, alias to "who -H"
function old new delta who_main 451 463 +12 packed_usage 31477 31485 +8 applet_main 1508 1512 +4 applet_names 2606 2608 +2 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 4/0 up/down: 26/0) Total: 26 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		| @@ -23,6 +23,14 @@ | ||||
| //config:      help | ||||
| //config:        who is used to show who is logged on. | ||||
| //config: | ||||
| // procps-ng has this variation of "who": | ||||
| //config:config W | ||||
| //config:      bool "w" | ||||
| //config:      default y | ||||
| //config:      depends on FEATURE_UTMP | ||||
| //config:      help | ||||
| //config:        w is used to show who is logged on. | ||||
| //config: | ||||
| //config:config USERS | ||||
| //config:      bool "users" | ||||
| //config:      default y | ||||
| @@ -32,7 +40,8 @@ | ||||
|  | ||||
| //                APPLET_ODDNAME:name   main location        suid_type     help | ||||
| //applet:IF_USERS(APPLET_ODDNAME(users, who, BB_DIR_USR_BIN, BB_SUID_DROP, users)) | ||||
| //applet:IF_WHO(APPLET(who, BB_DIR_USR_BIN, BB_SUID_DROP)) | ||||
| //applet:IF_USERS(APPLET_ODDNAME(w,     who, BB_DIR_USR_BIN, BB_SUID_DROP, w)) | ||||
| //applet:IF_WHO(  APPLET(        who,        BB_DIR_USR_BIN, BB_SUID_DROP)) | ||||
|  | ||||
| //kbuild:lib-$(CONFIG_USERS) += who.o | ||||
| //kbuild:lib-$(CONFIG_WHO) += who.o | ||||
| @@ -44,6 +53,31 @@ | ||||
| //usage:#define users_full_usage "\n\n" | ||||
| //usage:       "Print the users currently logged on" | ||||
|  | ||||
| //usage:#define w_trivial_usage | ||||
| //usage:       "" | ||||
| //usage:#define w_full_usage "\n\n" | ||||
| //usage:       "Show who is logged on" | ||||
| // | ||||
| // procps-ng 3.3.10: | ||||
| //           "\n	-h, --no-header" | ||||
| //           "\n	-u, --no-current" | ||||
| //	Ignores the username while figuring out the current process | ||||
| //	and cpu times.  To demonstrate this, do a "su" and do a "w" and a "w -u". | ||||
| //           "\n	-s, --short" | ||||
| //	Short format.  Don't print the login time, JCPU or PCPU times. | ||||
| //           "\n	-f, --from" | ||||
| //	Toggle printing the from (remote hostname) field. | ||||
| //	The default is for the from field to not be printed | ||||
| //           "\n	-i, --ip-addr" | ||||
| //	Display IP address instead of hostname for from field. | ||||
| //           "\n	-o, --old-style" | ||||
| //	Old style output. Prints blank space for idle times less than one minute. | ||||
| // Example output: | ||||
| //  17:28:00 up 4 days, 22:41,  4 users,  load average: 0.84, 0.97, 0.90 | ||||
| // USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT | ||||
| // root     tty1      Thu18    4days  4:33m  0.07s /bin/sh /etc/xdg/xfce4/xinitrc -- vt | ||||
| // root     pts/1     Mon13    3:24m  1:01   0.01s w | ||||
|  | ||||
| //usage:#define who_trivial_usage | ||||
| //usage:       "[-a]" | ||||
| //usage:#define who_full_usage "\n\n" | ||||
| @@ -74,14 +108,17 @@ static void idle_string(char *str6, time_t t) | ||||
| int who_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | ||||
| int who_main(int argc UNUSED_PARAM, char **argv) | ||||
| { | ||||
| #define CNT_APPLET (ENABLE_USERS + ENABLE_W + ENABLE_WHO) | ||||
| 	int do_users = (ENABLE_USERS && (CNT_APPLET == 1 || applet_name[0] == 'u')); | ||||
| 	int do_w     = (ENABLE_W     && (CNT_APPLET == 1 || applet_name[1] == '\0')); | ||||
| 	int do_who   = (ENABLE_WHO   && (CNT_APPLET == 1 || applet_name[1] == 'h')); | ||||
| 	struct utmpx *ut; | ||||
| 	unsigned opt; | ||||
| 	int do_users = (ENABLE_USERS && (!ENABLE_WHO || applet_name[0] == 'u')); | ||||
| 	const char *fmt = "%s"; | ||||
|  | ||||
| 	opt_complementary = "=0"; | ||||
| 	opt = getopt32(argv, do_users ? "" : "aH"); | ||||
| 	if (opt & 2) // -H | ||||
| 	opt = getopt32(argv, do_who ? "aH" : ""); | ||||
| 	if ((opt & 2) || do_w) /* -H or we are w */ | ||||
| 		puts("USER\t\tTTY\t\tIDLE\tTIME\t\t HOST"); | ||||
|  | ||||
| 	setutxent(); | ||||
| @@ -115,6 +152,9 @@ int who_main(int argc UNUSED_PARAM, char **argv) | ||||
| 						(int)sizeof(ut->ut_user), ut->ut_user, | ||||
| 						(int)sizeof(ut->ut_line), ut->ut_line, | ||||
| 						str6, | ||||
| // TODO: with LANG=en_US.UTF-8, who from coreutils 8.25 shows | ||||
| // TIME col as "2017-04-06 18:47" (the default format is "Apr  6 18:47"). | ||||
| // The former format looks saner to me. Switch to it unconditionally? | ||||
| 						ctime(&seconds) + 4, | ||||
| 						(int)sizeof(ut->ut_host), ut->ut_host | ||||
| 				); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user