Beispiel #1
0
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);
}
Beispiel #2
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);
}