--- projects/libstatgrab/src/statgrab/statgrab.c 2003/11/10 23:35:43 1.13 +++ projects/libstatgrab/src/statgrab/statgrab.c 2004/02/14 00:06:00 1.20 @@ -1,7 +1,7 @@ /* * i-scream central monitoring system * http://www.i-scream.org - * Copyright (C) 2000-2003 i-scream + * Copyright (C) 2000-2004 i-scream * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -16,6 +16,8 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id: statgrab.c,v 1.20 2004/02/14 00:06:00 ats Exp $ */ #ifdef HAVE_CONFIG_H @@ -35,7 +37,9 @@ typedef enum { FLOAT, DOUBLE, STRING, - INT + INT, + BOOL, + DUPLEX } stat_type; typedef enum { @@ -346,6 +350,7 @@ void populate_proc() { void populate_net() { int n, i; network_stat_t *net; + network_iface_stat_t *iface; net = use_diffs ? get_network_stats_diff(&n) : get_network_stats(&n); if (net != NULL) { @@ -362,6 +367,20 @@ void populate_net() { "net", name, "systime", NULL); } } + + iface = get_network_iface_stats(&n); + if (iface != NULL) { + for (i = 0; i < n; i++) { + const char *name = iface[i].interface_name; + + add_stat(INT, &iface[i].speed, + "net", name, "speed", NULL); + add_stat(BOOL, &iface[i].up, + "net", name, "up", NULL); + add_stat(DUPLEX, &iface[i].dup, + "net", name, "duplex", NULL); + } + } } void populate_page() { @@ -458,6 +477,22 @@ void print_stat_value(const stat *s) { case INT: printf("%d", *(int *)v); break; + case BOOL: + printf("%s", *(int *)v ? "true" : "false"); + break; + case DUPLEX: + switch (*(statgrab_duplex *) v) { + case FULL_DUPLEX: + printf("full"); + break; + case HALF_DUPLEX: + printf("half"); + break; + default: + printf("unknown"); + break; + } + break; } } @@ -608,10 +643,8 @@ int main(int argc, char **argv) { /* We don't care if statgrab_init fails, because we can just display the statistics that can be read as non-root. */ statgrab_init(); -#ifdef ALLBSD - if (setegid(getgid()) != 0) - die("Failed to lose effective group"); -#endif + if (statgrab_drop_privileges() != 0) + die("Failed to drop setuid/setgid privileges"); switch (repeat_mode) { case REPEAT_NONE: