diff options
author | Gunnar Beutner <gunnar@beutner.name> | 2014-04-21 21:51:19 +0200 |
---|---|---|
committer | Holger Weiss <holger@zedat.fu-berlin.de> | 2014-04-27 19:59:06 +0200 |
commit | 5e03bd8e8cf4ea41aef6cf5d7f115afa7565c861 (patch) | |
tree | e3b9e30280782fa171b3e13f1d41cd580e7c1b87 | |
parent | e0af39d7e9fcd084cf7d2d8a57d07ab1f8038150 (diff) | |
download | monitoring-plugins-5e03bd8e8cf4ea41aef6cf5d7f115afa7565c861.tar.gz |
Make check_users work on Windows.
-rw-r--r-- | configure.ac | 10 | ||||
-rw-r--r-- | plugins/Makefile.am | 2 | ||||
-rw-r--r-- | plugins/check_users.c | 44 |
3 files changed, 51 insertions, 5 deletions
diff --git a/configure.ac b/configure.ac index f405cce7..244df427 100644 --- a/configure.ac +++ b/configure.ac | |||
@@ -364,8 +364,16 @@ dnl Check for headers used by check_users | |||
364 | AC_CHECK_HEADERS(utmpx.h) | 364 | AC_CHECK_HEADERS(utmpx.h) |
365 | AM_CONDITIONAL([HAVE_UTMPX], [test "$ac_cv_header_utmpx_h" = "yes"]) | 365 | AM_CONDITIONAL([HAVE_UTMPX], [test "$ac_cv_header_utmpx_h" = "yes"]) |
366 | 366 | ||
367 | AC_CHECK_HEADERS(wtsapi32.h, [], [], [#include <windows.h>]) | ||
368 | AM_CONDITIONAL([HAVE_WTS32API], [test "$ac_cv_header_wtsapi32_h" = "yes"]) | ||
369 | |||
370 | if test "$ac_cv_header_wtsapi32_h" = "yes"; then | ||
371 | WTSAPI32LIBS="-lwtsapi32" | ||
372 | AC_SUBST(WTSAPI32LIBS) | ||
373 | fi | ||
374 | |||
367 | dnl Fallback to who(1) if the system doesn't provide an utmpx(5) interface | 375 | dnl Fallback to who(1) if the system doesn't provide an utmpx(5) interface |
368 | if test "$ac_cv_header_utmpx_h" = "no" | 376 | if test "$ac_cv_header_utmpx_h" = "no" -a "$ac_cv_header_wtsapi32_h" = "no" |
369 | then | 377 | then |
370 | AC_PATH_PROG(PATH_TO_WHO,who) | 378 | AC_PATH_PROG(PATH_TO_WHO,who) |
371 | 379 | ||
diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 6b347fe9..0ddf9bd1 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am | |||
@@ -107,7 +107,7 @@ check_tcp_LDADD = $(SSLOBJS) | |||
107 | check_time_LDADD = $(NETLIBS) | 107 | check_time_LDADD = $(NETLIBS) |
108 | check_ntp_time_LDADD = $(NETLIBS) $(MATHLIBS) | 108 | check_ntp_time_LDADD = $(NETLIBS) $(MATHLIBS) |
109 | check_ups_LDADD = $(NETLIBS) | 109 | check_ups_LDADD = $(NETLIBS) |
110 | check_users_LDADD = $(BASEOBJS) | 110 | check_users_LDADD = $(BASEOBJS) $(WTSAPI32LIBS) |
111 | check_by_ssh_LDADD = $(NETLIBS) | 111 | check_by_ssh_LDADD = $(NETLIBS) |
112 | check_ide_smart_LDADD = $(BASEOBJS) | 112 | check_ide_smart_LDADD = $(BASEOBJS) |
113 | negate_LDADD = $(BASEOBJS) | 113 | negate_LDADD = $(BASEOBJS) |
diff --git a/plugins/check_users.c b/plugins/check_users.c index 458a7ca6..a009f20b 100644 --- a/plugins/check_users.c +++ b/plugins/check_users.c | |||
@@ -37,7 +37,12 @@ const char *email = "devel@monitoring-plugins.org"; | |||
37 | #include "common.h" | 37 | #include "common.h" |
38 | #include "utils.h" | 38 | #include "utils.h" |
39 | 39 | ||
40 | #if HAVE_UTMPX_H | 40 | #if HAVE_WTSAPI32_H |
41 | # include <windows.h> | ||
42 | # include <wtsapi32.h> | ||
43 | # undef ERROR | ||
44 | # define ERROR -1 | ||
45 | #elif HAVE_UTMPX_H | ||
41 | # include <utmpx.h> | 46 | # include <utmpx.h> |
42 | #else | 47 | #else |
43 | # include "popen.h" | 48 | # include "popen.h" |
@@ -58,7 +63,11 @@ main (int argc, char **argv) | |||
58 | int users = -1; | 63 | int users = -1; |
59 | int result = STATE_UNKNOWN; | 64 | int result = STATE_UNKNOWN; |
60 | char *perf; | 65 | char *perf; |
61 | #if HAVE_UTMPX_H | 66 | #if HAVE_WTSAPI32_H |
67 | WTS_SESSION_INFO *wtsinfo; | ||
68 | DWORD wtscount; | ||
69 | DWORD index; | ||
70 | #elif HAVE_UTMPX_H | ||
62 | struct utmpx *putmpx; | 71 | struct utmpx *putmpx; |
63 | #else | 72 | #else |
64 | char input_buffer[MAX_INPUT_BUFFER]; | 73 | char input_buffer[MAX_INPUT_BUFFER]; |
@@ -78,7 +87,36 @@ main (int argc, char **argv) | |||
78 | 87 | ||
79 | users = 0; | 88 | users = 0; |
80 | 89 | ||
81 | #if HAVE_UTMPX_H | 90 | #if HAVE_WTSAPI32_H |
91 | if (!WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, | ||
92 | 0, 1, &wtsinfo, &wtscount)) { | ||
93 | printf(_("Could not enumerate RD sessions: %d\n"), GetLastError()); | ||
94 | return STATE_UNKNOWN; | ||
95 | } | ||
96 | |||
97 | for (index = 0; index < wtscount; index++) { | ||
98 | LPTSTR username; | ||
99 | DWORD size; | ||
100 | int len; | ||
101 | |||
102 | if (!WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, | ||
103 | wtsinfo[index].SessionId, WTSUserName, &username, &size)) | ||
104 | continue; | ||
105 | |||
106 | len = lstrlen(username); | ||
107 | |||
108 | WTSFreeMemory(username); | ||
109 | |||
110 | if (len == 0) | ||
111 | continue; | ||
112 | |||
113 | if (wtsinfo[index].State == WTSActive || | ||
114 | wtsinfo[index].State == WTSDisconnected) | ||
115 | users++; | ||
116 | } | ||
117 | |||
118 | WTSFreeMemory(wtsinfo); | ||
119 | #elif HAVE_UTMPX_H | ||
82 | /* get currently logged users from utmpx */ | 120 | /* get currently logged users from utmpx */ |
83 | setutxent (); | 121 | setutxent (); |
84 | 122 | ||