Add the who applet, supplied by Da Chen
No binary (build failed)
—
(log yok)
| @@ -0,0 +1,85 @@ | |
| + | /* vi: set sw=4 ts=4: */ |
| + | /*---------------------------------------------------------------------- |
| + | * Mini who is used to display user name, login time, |
| + | * idle time and host name. |
| + | * |
| + | * Author: Da Chen <[email protected]> |
| + | * |
| + | * This is a free document; you can redistribute it and/or |
| + | * modify it under the terms of the GNU General Public License |
| + | * as published by the Free Software Foundation: |
| + | * http://www.gnu.org/copyleft/gpl.html |
| + | * |
| + | * Copyright (c) 2002 AYR Networks, Inc. |
| + | *---------------------------------------------------------------------- |
| + | */ |
| + | |
| + | #include <sys/types.h> |
| + | #include <fcntl.h> |
| + | #include <unistd.h> |
| + | #include <stdlib.h> |
| + | #include <utmp.h> |
| + | #include <sys/stat.h> |
| + | #include <errno.h> |
| + | #include <string.h> |
| + | #include <time.h> |
| + | #include <busybox.h> |
| + | |
| + | extern int who_main(int argc, char **argv) |
| + | { |
| + | struct utmp *ut; |
| + | struct stat st; |
| + | int devlen, len; |
| + | time_t now, idle; |
| + | |
| + | if (argc > 1) |
| + | show_usage(); |
| + | |
| + | setutent(); |
| + | devlen = sizeof("/dev/") - 1; |
| + | printf("USER TTY IDLE FROM HOST\n"); |
| + | |
| + | while ((ut = getutent()) != NULL) { |
| + | char name[40]; |
| + | |
| + | if (ut->ut_user[0] && ut->ut_type == USER_PROCESS) { |
| + | len = strlen(ut->ut_line); |
| + | if (ut->ut_line[0] == '/') { |
| + | strncpy(name, ut->ut_line, len); |
| + | name[len] = '\0'; |
| + | strcpy(ut->ut_line, ut->ut_line + devlen); |
| + | } else { |
| + | strcpy(name, "/dev/"); |
| + | strncpy(name+devlen, ut->ut_line, len); |
| + | name[devlen+len] = '\0'; |
| + | } |
| + | |
| + | printf("%-10s %-8s ", ut->ut_user, ut->ut_line); |
| + | |
| + | if (stat(name, &st) == 0) { |
| + | now = time(NULL); |
| + | idle = now - st.st_atime; |
| + | |
| + | if (idle < 60) |
| + | printf("00:00m "); |
| + | else if (idle < (60 * 60)) |
| + | printf("00:%02dm ", (int)(idle / 60)); |
| + | else if (idle < (24 * 60 * 60)) |
| + | printf("%02d:%02dm ", (int)(idle / (60 * 60)), |
| + | (int)(idle % (60 * 60)) / 60); |
| + | else if (idle < (24 * 60 * 60 * 365)) |
| + | printf("%03ddays ", (int)(idle / (24 * 60 * 60))); |
| + | else |
| + | printf("%02dyears ", (int) (idle / (24 * 60 * 60 * 365))); |
| + | } else |
| + | printf("%-8s ", "?"); |
| + | |
| + | printf("%-12.12s %s\n", ctime(&(ut->ut_tv.tv_sec)) + 4, ut->ut_host); |
| + | } |
| + | } |
| + | endutent(); |
| + | |
| + | return 0; |
| + | } |
| + | |
| + | |
| @@ -506,6 +506,9 @@ | |
| #ifdef CONFIG_WHICH | |
| APPLET(which, which_main, _BB_DIR_USR_BIN) | |
| #endif | |
| + | #ifdef CONFIG_WHO |
| + | APPLET(who, who_main, _BB_DIR_USR_BIN) |
| + | #endif |
| #ifdef CONFIG_WHOAMI | |
| APPLET(whoami, whoami_main, _BB_DIR_USR_BIN) | |
| #endif | |
| @@ -1261,9 +1261,13 @@ | |
| "$ mv /tmp/foo /bin/bar\n" | |
| #define nc_trivial_usage \ | |
| - | "[IP] [port]" |
| + | "[OPTIONS] [IP] [port]" |
| #define nc_full_usage \ | |
| - | "Netcat opens a pipe to IP:port" |
| + | "Netcat opens a pipe to IP:port\n\n" \ |
| + | "Options:\n" \ |
| + | "\t-l\t\tlisten mode, for inbound connects\n" \ |
| + | "\t-p PORT\t\tlocal port number\n" \ |
| + | "\t-e PROG\t\tprogram to exec after connect (dangerous!)" |
| #define nc_example_usage \ | |
| "$ nc foobar.somedomain.com 25\n" \ | |
| "220 foobar ESMTP Exim 3.12 #1 Sat, 15 Apr 2000 00:03:02 -0600\n" \ | |
| @@ -1967,6 +1971,10 @@ | |
| #define which_example_usage \ | |
| "$ which login\n" \ | |
| "/bin/login\n" | |
| + | #define who_trivial_usage \ |
| + | " " |
| + | #define who_full_usage \ |
| + | "Prints the current user names and related information" |
| #define whoami_trivial_usage \ | |
| "" | |