Widen host field and don't truncate host names longer than the field.

Display user idle times as days, hours, minutes, seconds.
This commit is contained in:
brezak 1993-06-08 14:45:37 +00:00
parent b73700b0f9
commit 0d06258f71

View File

@ -42,7 +42,7 @@
#include <rpcsvc/rnusers.h> #include <rpcsvc/rnusers.h>
#define MAX_INT 0x7fffffff #define MAX_INT 0x7fffffff
#define HOST_WIDTH 12 #define HOST_WIDTH 20
#define LINE_WIDTH 15 #define LINE_WIDTH 15
char *argv0; char *argv0;
@ -84,10 +84,11 @@ void remember_host(struct in_addr addr)
rusers_reply(char *replyp, struct sockaddr_in *raddrp) rusers_reply(char *replyp, struct sockaddr_in *raddrp)
{ {
int x, idle; int x, idle;
char date[128], idle_time[128], remote[128]; char date[32], idle_time[64], remote[64];
struct hostent *hp; struct hostent *hp;
utmpidlearr *up = (utmpidlearr *)replyp; utmpidlearr *up = (utmpidlearr *)replyp;
char *host; char *host;
int days, hours, minutes, seconds;
if (search_host(raddrp->sin_addr)) if (search_host(raddrp->sin_addr))
return(0); return(0);
@ -103,29 +104,46 @@ rusers_reply(char *replyp, struct sockaddr_in *raddrp)
host = inet_ntoa(raddrp->sin_addr); host = inet_ntoa(raddrp->sin_addr);
if (!longopt) if (!longopt)
printf("%-*.*s ", HOST_WIDTH, HOST_WIDTH, host); printf("%-*s ", HOST_WIDTH, host);
for (x = 0; x < up->utmpidlearr_len; x++) { for (x = 0; x < up->utmpidlearr_len; x++) {
strncpy(date,
strcpy(date, &(ctime((time_t *)&(up->utmpidlearr_val[x].ui_utmp.ut_time))[4])); &(ctime((time_t *)&(up->utmpidlearr_val[x].ui_utmp.ut_time))[4]),
sizeof(date)-1);
idle = up->utmpidlearr_val[x].ui_idle; idle = up->utmpidlearr_val[x].ui_idle;
sprintf(idle_time, " :%02d", idle); sprintf(idle_time, " :%02d", idle);
if (idle == 0)
strcpy(idle_time, "");
if (idle > 60)
sprintf(idle_time, "%d:%02d", idle/60, idle%60);
if (idle == MAX_INT) if (idle == MAX_INT)
strcpy(idle_time, "??"); strcpy(idle_time, "??");
else if (idle == 0)
strcpy(idle_time, "");
else {
seconds = idle;
days = seconds/(60*60*24);
seconds %= (60*60*24);
hours = seconds/(60*60);
seconds %= (60*60);
minutes = seconds/60;
seconds %= 60;
if (idle > 60)
sprintf(idle_time, "%d:%02d",
minutes, seconds);
if (idle >= (60*60))
sprintf(idle_time, "%d:%02d:%02d",
hours, minutes, seconds);
if (idle >= (24*60*60))
sprintf(idle_time, "%d days, %d:%02d:%02d",
days, hours, minutes, seconds);
}
strcpy(remote, up->utmpidlearr_val[x].ui_utmp.ut_host); strncpy(remote, up->utmpidlearr_val[x].ui_utmp.ut_host, sizeof(remote)-1);
if (strlen(remote) != 0) if (strlen(remote) != 0)
sprintf(remote, "(%.16s)", up->utmpidlearr_val[x].ui_utmp.ut_host); sprintf(remote, "(%.16s)", up->utmpidlearr_val[x].ui_utmp.ut_host);
if (longopt) if (longopt)
printf("%-8.8s %*.*s:%-*.*s %-12.12s %6s %.18s\n", printf("%-8.8s %*s:%-*.*s %-12.12s %6s %.18s\n",
up->utmpidlearr_val[x].ui_utmp.ut_name, up->utmpidlearr_val[x].ui_utmp.ut_name,
HOST_WIDTH, HOST_WIDTH, host, HOST_WIDTH, host,
LINE_WIDTH, LINE_WIDTH, up->utmpidlearr_val[x].ui_utmp.ut_line, LINE_WIDTH, LINE_WIDTH, up->utmpidlearr_val[x].ui_utmp.ut_line,
date, date,
idle_time, idle_time,