summaryrefslogtreecommitdiffstats
path: root/web/attachments/418908-0001-check_users-use-utxent-functions-to-get-data.patch
diff options
context:
space:
mode:
Diffstat (limited to 'web/attachments/418908-0001-check_users-use-utxent-functions-to-get-data.patch')
-rw-r--r--web/attachments/418908-0001-check_users-use-utxent-functions-to-get-data.patch98
1 files changed, 98 insertions, 0 deletions
diff --git a/web/attachments/418908-0001-check_users-use-utxent-functions-to-get-data.patch b/web/attachments/418908-0001-check_users-use-utxent-functions-to-get-data.patch
new file mode 100644
index 0000000..84043bd
--- /dev/null
+++ b/web/attachments/418908-0001-check_users-use-utxent-functions-to-get-data.patch
@@ -0,0 +1,98 @@
1From 10d9e2aadb3f7db0ab784a1843abcea570adf9ec Mon Sep 17 00:00:00 2001
2From: Marc Remy <mremy@gmx.ch>
3Date: Wed, 20 Jul 2011 21:18:42 +0200
4Subject: [PATCH] check_users: use utxent functions to get data
5
6---
7 plugins/Makefile.am | 2 +-
8 plugins/check_users.c | 38 ++++++++------------------------------
9 2 files changed, 9 insertions(+), 31 deletions(-)
10
11diff --git a/plugins/Makefile.am b/plugins/Makefile.am
12index 36a28b0..3a2afc1 100644
13--- a/plugins/Makefile.am
14+++ b/plugins/Makefile.am
15@@ -101,7 +101,7 @@ check_tcp_LDADD = $(SSLOBJS) $(NETLIBS) $(SSLLIBS)
16 check_time_LDADD = $(NETLIBS)
17 check_ntp_time_LDADD = $(NETLIBS) $(MATHLIBS)
18 check_ups_LDADD = $(NETLIBS)
19-check_users_LDADD = $(BASEOBJS) popen.o
20+check_users_LDADD = $(BASEOBJS)
21 check_by_ssh_LDADD = $(NETLIBS)
22 check_ide_smart_LDADD = $(BASEOBJS)
23 negate_LDADD = $(BASEOBJS)
24diff --git a/plugins/check_users.c b/plugins/check_users.c
25index 8368612..fb8bcca 100644
26--- a/plugins/check_users.c
27+++ b/plugins/check_users.c
28@@ -35,8 +35,8 @@ const char *copyright = "2000-2007";
29 const char *email = "nagiosplug-devel@lists.sourceforge.net";
30
31 #include "common.h"
32-#include "popen.h"
33 #include "utils.h"
34+#include <utmpx.h>
35
36 #define possibly_set(a,b) ((a) == 0 ? (b) : 0)
37
38@@ -54,6 +54,7 @@ main (int argc, char **argv)
39 int result = STATE_UNKNOWN;
40 char input_buffer[MAX_INPUT_BUFFER];
41 char *perf;
42+ struct utmpx *putmpx;
43
44 setlocale (LC_ALL, "");
45 bindtextdomain (PACKAGE, LOCALEDIR);
46@@ -67,43 +68,20 @@ main (int argc, char **argv)
47 if (process_arguments (argc, argv) == ERROR)
48 usage4 (_("Could not parse arguments"));
49
50- /* run the command */
51- child_process = spopen (WHO_COMMAND);
52- if (child_process == NULL) {
53- printf (_("Could not open pipe: %s\n"), WHO_COMMAND);
54- return STATE_UNKNOWN;
55- }
56-
57- child_stderr = fdopen (child_stderr_array[fileno (child_process)], "r");
58- if (child_stderr == NULL)
59- printf (_("Could not open stderr for %s\n"), WHO_COMMAND);
60-
61 users = 0;
62
63- while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) {
64+ /* get currently logged users from utmpx */
65+ setutxent();
66
67- /* increment 'users' on all lines except total user count */
68- if (input_buffer[0] != '#') {
69+ while( (putmpx=getutxent()) ) {
70+ if( (putmpx->ut_type==USER_PROCESS) ) {
71 users++;
72- continue;
73 }
74-
75- /* get total logged in users */
76- if (sscanf (input_buffer, _("# users=%d"), &users) == 1)
77- break;
78-
79 }
80
81- /* check STDERR */
82- if (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_stderr))
83- result = possibly_set (result, STATE_UNKNOWN);
84- (void) fclose (child_stderr);
85-
86- /* close the pipe */
87- if (spclose (child_process))
88- result = possibly_set (result, STATE_UNKNOWN);
89+ endutxent();
90
91- /* else check the user count against warning and critical thresholds */
92+ /* check the user count against warning and critical thresholds */
93 if (users > cusers)
94 result = STATE_CRITICAL;
95 else if (users > wusers)
96--
971.7.2.5
98