static int rusers_reply(caddr_t replyp, struct sockaddr_in *raddrp) { u_int x; int idle; char date[32], idle_time[64], remote[64]; struct hostent *hp; utmpidlearr *up, u; char *host; int days, hours, minutes, seconds; up = &u; memcpy(up, replyp, sizeof(*up)); if (search_host(raddrp->sin_addr)) return (0); if (!allopt && up->utmpidlearr_len == 0) return (0); hp = gethostbyaddr(&raddrp->sin_addr.s_addr, sizeof(struct in_addr), AF_INET); if (hp != NULL) host = hp->h_name; else host = inet_ntoa(raddrp->sin_addr); if (!longopt) printf("%-*s ", HOST_WIDTH, host); for (x = 0; x < up->utmpidlearr_len; x++) { strncpy(date, &(ctime((time_t *)&(up->utmpidlearr_val[x].ui_utmp.ut_time))[4]), sizeof(date) - 1); idle = up->utmpidlearr_val[x].ui_idle; sprintf(idle_time, " :%02d", idle); if (idle == MAX_INT) 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); } strncpy(remote, up->utmpidlearr_val[x].ui_utmp.ut_host, sizeof(remote) - 1); if (strlen(remote) != 0) sprintf(remote, "(%.16s)", up->utmpidlearr_val[x].ui_utmp.ut_host); if (longopt) printf("%-8.8s %*s:%-*.*s %-12.12s %6s %.18s\n", up->utmpidlearr_val[x].ui_utmp.ut_name, HOST_WIDTH, host, LINE_WIDTH, LINE_WIDTH, up->utmpidlearr_val[x].ui_utmp.ut_line, date, idle_time, remote ); else printf("%s ", up->utmpidlearr_val[x].ui_utmp.ut_name); } if (!longopt) putchar('\n'); remember_host(raddrp->sin_addr); return (0); }
static bool_t rstat_reply(caddr_t replyp, struct sockaddr_in *raddrp) { struct tm *tmp_time; struct tm host_time; struct tm host_uptime; char days_buf[16]; char hours_buf[16]; struct hostent *hp; char *host; statstime *host_stat = (statstime *)replyp; time_t tmp_time_t; if (search_host(raddrp->sin_addr)) return(0); hp = gethostbyaddr(&raddrp->sin_addr.s_addr, sizeof(struct in_addr), AF_INET); if (hp) host = hp->h_name; else host = inet_ntoa(raddrp->sin_addr); /* truncate hostname to fit nicely into field */ if (strlen(host) > HOST_WIDTH) host[HOST_WIDTH] = '\0'; printf("%-*s\t", HOST_WIDTH, host); if (sizeof(time_t) == sizeof(host_stat->curtime.tv_sec)) { tmp_time = localtime((time_t *)&host_stat->curtime.tv_sec); host_time = *tmp_time; host_stat->curtime.tv_sec -= host_stat->boottime.tv_sec; tmp_time = gmtime((time_t *)&host_stat->curtime.tv_sec); host_uptime = *tmp_time; } else { /* non-32-bit time_t */ tmp_time_t = host_stat->curtime.tv_sec; tmp_time = localtime(&tmp_time_t); host_time = *tmp_time; host_stat->curtime.tv_sec -= host_stat->boottime.tv_sec; tmp_time_t = host_stat->curtime.tv_sec; tmp_time = gmtime(&tmp_time_t); host_uptime = *tmp_time; } #define updays (host_stat->curtime.tv_sec / 86400) if (host_uptime.tm_yday != 0) snprintf(days_buf, sizeof days_buf, "%3d day%s, ", updays, (updays > 1) ? "s" : ""); else days_buf[0] = '\0'; if (host_uptime.tm_hour != 0) snprintf(hours_buf, sizeof hours_buf, "%2d:%02d, ", host_uptime.tm_hour, host_uptime.tm_min); else if (host_uptime.tm_min != 0) snprintf(hours_buf, sizeof hours_buf, "%2d mins, ", host_uptime.tm_min); else if (host_stat->curtime.tv_sec < 60) snprintf(hours_buf, sizeof hours_buf, "%2d secs, ", host_uptime.tm_sec); else hours_buf[0] = '\0'; printf(" %2d:%02d%cm up %9.9s%9.9s load average: %.2f %.2f %.2f\n", (host_time.tm_hour % 12) ? host_time.tm_hour % 12 : 12, host_time.tm_min, (host_time.tm_hour >= 12) ? 'p' : 'a', days_buf, hours_buf, (double)host_stat->avenrun[0]/FSCALE, (double)host_stat->avenrun[1]/FSCALE, (double)host_stat->avenrun[2]/FSCALE); remember_host(raddrp->sin_addr); return(0); }