mirror of
https://github.com/monitoring-plugins/monitoring-plugins.git
synced 2026-04-15 22:00:06 -04:00
Make check_users work on Windows.
This commit is contained in:
parent
e0af39d7e9
commit
5e03bd8e8c
3 changed files with 51 additions and 5 deletions
10
configure.ac
10
configure.ac
|
|
@ -364,8 +364,16 @@ dnl Check for headers used by check_users
|
|||
AC_CHECK_HEADERS(utmpx.h)
|
||||
AM_CONDITIONAL([HAVE_UTMPX], [test "$ac_cv_header_utmpx_h" = "yes"])
|
||||
|
||||
AC_CHECK_HEADERS(wtsapi32.h, [], [], [#include <windows.h>])
|
||||
AM_CONDITIONAL([HAVE_WTS32API], [test "$ac_cv_header_wtsapi32_h" = "yes"])
|
||||
|
||||
if test "$ac_cv_header_wtsapi32_h" = "yes"; then
|
||||
WTSAPI32LIBS="-lwtsapi32"
|
||||
AC_SUBST(WTSAPI32LIBS)
|
||||
fi
|
||||
|
||||
dnl Fallback to who(1) if the system doesn't provide an utmpx(5) interface
|
||||
if test "$ac_cv_header_utmpx_h" = "no"
|
||||
if test "$ac_cv_header_utmpx_h" = "no" -a "$ac_cv_header_wtsapi32_h" = "no"
|
||||
then
|
||||
AC_PATH_PROG(PATH_TO_WHO,who)
|
||||
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ check_tcp_LDADD = $(SSLOBJS)
|
|||
check_time_LDADD = $(NETLIBS)
|
||||
check_ntp_time_LDADD = $(NETLIBS) $(MATHLIBS)
|
||||
check_ups_LDADD = $(NETLIBS)
|
||||
check_users_LDADD = $(BASEOBJS)
|
||||
check_users_LDADD = $(BASEOBJS) $(WTSAPI32LIBS)
|
||||
check_by_ssh_LDADD = $(NETLIBS)
|
||||
check_ide_smart_LDADD = $(BASEOBJS)
|
||||
negate_LDADD = $(BASEOBJS)
|
||||
|
|
|
|||
|
|
@ -37,7 +37,12 @@ const char *email = "devel@monitoring-plugins.org";
|
|||
#include "common.h"
|
||||
#include "utils.h"
|
||||
|
||||
#if HAVE_UTMPX_H
|
||||
#if HAVE_WTSAPI32_H
|
||||
# include <windows.h>
|
||||
# include <wtsapi32.h>
|
||||
# undef ERROR
|
||||
# define ERROR -1
|
||||
#elif HAVE_UTMPX_H
|
||||
# include <utmpx.h>
|
||||
#else
|
||||
# include "popen.h"
|
||||
|
|
@ -58,7 +63,11 @@ main (int argc, char **argv)
|
|||
int users = -1;
|
||||
int result = STATE_UNKNOWN;
|
||||
char *perf;
|
||||
#if HAVE_UTMPX_H
|
||||
#if HAVE_WTSAPI32_H
|
||||
WTS_SESSION_INFO *wtsinfo;
|
||||
DWORD wtscount;
|
||||
DWORD index;
|
||||
#elif HAVE_UTMPX_H
|
||||
struct utmpx *putmpx;
|
||||
#else
|
||||
char input_buffer[MAX_INPUT_BUFFER];
|
||||
|
|
@ -78,7 +87,36 @@ main (int argc, char **argv)
|
|||
|
||||
users = 0;
|
||||
|
||||
#if HAVE_UTMPX_H
|
||||
#if HAVE_WTSAPI32_H
|
||||
if (!WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE,
|
||||
0, 1, &wtsinfo, &wtscount)) {
|
||||
printf(_("Could not enumerate RD sessions: %d\n"), GetLastError());
|
||||
return STATE_UNKNOWN;
|
||||
}
|
||||
|
||||
for (index = 0; index < wtscount; index++) {
|
||||
LPTSTR username;
|
||||
DWORD size;
|
||||
int len;
|
||||
|
||||
if (!WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE,
|
||||
wtsinfo[index].SessionId, WTSUserName, &username, &size))
|
||||
continue;
|
||||
|
||||
len = lstrlen(username);
|
||||
|
||||
WTSFreeMemory(username);
|
||||
|
||||
if (len == 0)
|
||||
continue;
|
||||
|
||||
if (wtsinfo[index].State == WTSActive ||
|
||||
wtsinfo[index].State == WTSDisconnected)
|
||||
users++;
|
||||
}
|
||||
|
||||
WTSFreeMemory(wtsinfo);
|
||||
#elif HAVE_UTMPX_H
|
||||
/* get currently logged users from utmpx */
|
||||
setutxent ();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue