diff options
Diffstat (limited to 'plugins/check_users.c')
-rw-r--r-- | plugins/check_users.c | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/plugins/check_users.c b/plugins/check_users.c index 458a7ca..a009f20 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 | ||