diff options
Diffstat (limited to 'plugins/check_game.c')
-rw-r--r-- | plugins/check_game.c | 46 |
1 files changed, 15 insertions, 31 deletions
diff --git a/plugins/check_game.c b/plugins/check_game.c index 08b04d6d..912072c2 100644 --- a/plugins/check_game.c +++ b/plugins/check_game.c | |||
@@ -23,8 +23,8 @@ const char *copyright = "2002-2004"; | |||
23 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; | 23 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; |
24 | 24 | ||
25 | #include "common.h" | 25 | #include "common.h" |
26 | #include "popen.h" | ||
27 | #include "utils.h" | 26 | #include "utils.h" |
27 | #include "runcmd.h" | ||
28 | 28 | ||
29 | int process_arguments (int, char **); | 29 | int process_arguments (int, char **); |
30 | int validate_arguments (void); | 30 | int validate_arguments (void); |
@@ -57,16 +57,16 @@ main (int argc, char **argv) | |||
57 | char *command_line; | 57 | char *command_line; |
58 | int result = STATE_UNKNOWN; | 58 | int result = STATE_UNKNOWN; |
59 | FILE *fp; | 59 | FILE *fp; |
60 | char input_buffer[MAX_INPUT_BUFFER]; | ||
61 | char *p, *ret[QSTAT_MAX_RETURN_ARGS]; | 60 | char *p, *ret[QSTAT_MAX_RETURN_ARGS]; |
62 | int i; | 61 | size_t i = 0; |
62 | output chld_out; | ||
63 | 63 | ||
64 | setlocale (LC_ALL, ""); | 64 | setlocale (LC_ALL, ""); |
65 | bindtextdomain (PACKAGE, LOCALEDIR); | 65 | bindtextdomain (PACKAGE, LOCALEDIR); |
66 | textdomain (PACKAGE); | 66 | textdomain (PACKAGE); |
67 | 67 | ||
68 | if (process_arguments (argc, argv) == ERROR) | 68 | if (process_arguments (argc, argv) == ERROR) |
69 | usage4 (_("Could not parse arguments")); | 69 | usage_va(_("Could not parse arguments")); |
70 | 70 | ||
71 | result = STATE_OK; | 71 | result = STATE_OK; |
72 | 72 | ||
@@ -80,17 +80,9 @@ main (int argc, char **argv) | |||
80 | if (verbose > 0) | 80 | if (verbose > 0) |
81 | printf ("%s\n", command_line); | 81 | printf ("%s\n", command_line); |
82 | 82 | ||
83 | /* run the command */ | 83 | /* run the command. historically, this plugin ignores output on stderr, |
84 | fp = spopen (command_line); | 84 | * as well as return status of the qstat program */ |
85 | if (fp == NULL) { | 85 | (void)np_runcmd(command_line, &chld_out, NULL, 0); |
86 | printf (_("Could not open pipe: %s\n"), command_line); | ||
87 | return STATE_UNKNOWN; | ||
88 | } | ||
89 | |||
90 | fgets (input_buffer, MAX_INPUT_BUFFER - 1, fp); /* Only interested in the first line */ | ||
91 | |||
92 | /* strip the newline character from the end of the input */ | ||
93 | input_buffer[strlen (input_buffer) - 1] = 0; | ||
94 | 86 | ||
95 | /* sanity check */ | 87 | /* sanity check */ |
96 | /* was thinking about running qstat without any options, capturing the | 88 | /* was thinking about running qstat without any options, capturing the |
@@ -102,18 +94,13 @@ main (int argc, char **argv) | |||
102 | In the end, I figured I'd simply let an error occur & then trap it | 94 | In the end, I figured I'd simply let an error occur & then trap it |
103 | */ | 95 | */ |
104 | 96 | ||
105 | if (!strncmp (input_buffer, "unknown option", 14)) { | 97 | if (!strncmp (chld_out.line[0], "unknown option", 14)) { |
106 | printf (_("CRITICAL - Host type parameter incorrect!\n")); | 98 | printf (_("CRITICAL - Host type parameter incorrect!\n")); |
107 | result = STATE_CRITICAL; | 99 | result = STATE_CRITICAL; |
108 | return result; | 100 | return result; |
109 | } | 101 | } |
110 | 102 | ||
111 | /* initialize the returned data buffer */ | 103 | p = (char *) strtok (chld_out.line[0], QSTAT_DATA_DELIMITER); |
112 | for (i = 0; i < QSTAT_MAX_RETURN_ARGS; i++) | ||
113 | ret[i] = strdup(""); | ||
114 | |||
115 | i = 0; | ||
116 | p = (char *) strtok (input_buffer, QSTAT_DATA_DELIMITER); | ||
117 | while (p != NULL) { | 104 | while (p != NULL) { |
118 | ret[i] = p; | 105 | ret[i] = p; |
119 | p = (char *) strtok (NULL, QSTAT_DATA_DELIMITER); | 106 | p = (char *) strtok (NULL, QSTAT_DATA_DELIMITER); |
@@ -141,17 +128,14 @@ main (int argc, char **argv) | |||
141 | ret[qstat_game_field], | 128 | ret[qstat_game_field], |
142 | ret[qstat_map_field], | 129 | ret[qstat_map_field], |
143 | ret[qstat_ping_field], | 130 | ret[qstat_ping_field], |
144 | perfdata ("players", atol(ret[qstat_game_players]), "", | 131 | perfdata ("players", atol(ret[qstat_game_players]), "", |
145 | FALSE, 0, FALSE, 0, | 132 | FALSE, 0, FALSE, 0, |
146 | TRUE, 0, TRUE, atol(ret[qstat_game_players_max])), | 133 | TRUE, 0, TRUE, atol(ret[qstat_game_players_max])), |
147 | fperfdata ("ping", strtod(ret[qstat_ping_field], NULL), "", | 134 | fperfdata ("ping", strtod(ret[qstat_ping_field], NULL), "", |
148 | FALSE, 0, FALSE, 0, | 135 | FALSE, 0, FALSE, 0, |
149 | TRUE, 0, FALSE, 0)); | 136 | TRUE, 0, FALSE, 0)); |
150 | } | 137 | } |
151 | 138 | ||
152 | /* close the pipe */ | ||
153 | spclose (fp); | ||
154 | |||
155 | return result; | 139 | return result; |
156 | } | 140 | } |
157 | 141 | ||
@@ -197,8 +181,6 @@ process_arguments (int argc, char **argv) | |||
197 | break; | 181 | break; |
198 | 182 | ||
199 | switch (c) { | 183 | switch (c) { |
200 | case '?': /* args not parsable */ | ||
201 | usage2 (_("Unknown argument"), optarg); | ||
202 | case 'h': /* help */ | 184 | case 'h': /* help */ |
203 | print_help (); | 185 | print_help (); |
204 | exit (STATE_OK); | 186 | exit (STATE_OK); |
@@ -251,6 +233,8 @@ process_arguments (int argc, char **argv) | |||
251 | if (qstat_game_players_max < 0 || qstat_game_players_max > QSTAT_MAX_RETURN_ARGS) | 233 | if (qstat_game_players_max < 0 || qstat_game_players_max > QSTAT_MAX_RETURN_ARGS) |
252 | return ERROR; | 234 | return ERROR; |
253 | break; | 235 | break; |
236 | default: /* args not parsable */ | ||
237 | usage_va(_("Unknown argument - %s"), optarg); | ||
254 | } | 238 | } |
255 | } | 239 | } |
256 | 240 | ||
@@ -328,8 +312,8 @@ void | |||
328 | print_usage (void) | 312 | print_usage (void) |
329 | { | 313 | { |
330 | printf ("\ | 314 | printf ("\ |
331 | Usage: %s [-hvV] [-P port] [-t timeout] [-g game_field] [-m map_field]\n\ | 315 | Usage: %s <game> <ip_address> [-p port] [-gf game_field] [-mf map_field]\n\ |
332 | [-p ping_field] [-G game-time] [-H hostname] <game> <ip_address>\n", progname); | 316 | [-pf ping_field]\n", progname); |
333 | } | 317 | } |
334 | 318 | ||
335 | /****************************************************************************** | 319 | /****************************************************************************** |