--- projects/libstatgrab/src/libstatgrab/user_stats.c 2004/11/01 18:30:17 1.27 +++ projects/libstatgrab/src/libstatgrab/user_stats.c 2005/09/24 13:29:23 1.28 @@ -18,7 +18,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA * 02111-1307 USA * - * $Id: user_stats.c,v 1.27 2004/11/01 18:30:17 tdb Exp $ + * $Id: user_stats.c,v 1.28 2005/09/24 13:29:23 tdb Exp $ */ #ifdef HAVE_CONFIG_H @@ -39,13 +39,19 @@ #ifdef OPENBSD #include #endif +#ifndef WIN32 #include +#endif #ifdef CYGWIN #include #endif #ifdef HPUX #include #endif +#ifdef WIN32 +#include +#include +#endif sg_user_stats *sg_get_user_stats(){ int num_users = 0, pos = 0, new_pos; @@ -73,6 +79,57 @@ sg_user_stats *sg_get_user_stats(){ num_users++; } fclose(f); +#elif defined (WIN32) + LPWKSTA_USER_INFO_0 buf = NULL; + LPWKSTA_USER_INFO_0 tmp_buf; + unsigned long entries_read = 0; + unsigned long entries_tot = 0; + unsigned long resumehandle = 0; + NET_API_STATUS nStatus; + int i; + char name[256]; + + do { + nStatus = NetWkstaUserEnum(NULL, 0, (LPBYTE*)&buf, + MAX_PREFERRED_LENGTH, &entries_read, + &entries_tot, &resumehandle); + if((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA)) { + if((tmp_buf = buf) == NULL) { + continue; + } + for (i=0; iwkui0_username, -1, name, sizeof(name), NULL, NULL); + + new_pos = pos + strlen(name) + 1; + if(VECTOR_RESIZE(name_list, new_pos) < 0) { + NetApiBufferFree(buf); + return NULL; + } + strcpy(name_list + pos, name); + name_list[new_pos - 1] = ' '; + pos = new_pos; + + tmp_buf++; + num_users++; + } + } else { + sg_set_error(SG_ERROR_PERMISSION, "User enum"); + return NULL; + } + if (buf != NULL) { + NetApiBufferFree(buf); + buf=NULL; + } + } while (nStatus == ERROR_MORE_DATA); + if (buf != NULL) { + NetApiBufferFree(buf); + } #else /* This works on everything else. */ struct utmp *entry;