diff options
-rw-r--r-- | plugins/check_by_ssh.c | 203 | ||||
-rw-r--r-- | plugins/check_disk.c | 226 | ||||
-rw-r--r-- | plugins/check_nt.c | 6 | ||||
-rw-r--r-- | plugins/netutils.c | 6 | ||||
-rw-r--r-- | plugins/netutils.h | 4 | ||||
-rw-r--r-- | plugins/popen.h | 2 | ||||
-rw-r--r-- | plugins/utils.h | 16 |
7 files changed, 240 insertions, 223 deletions
diff --git a/plugins/check_by_ssh.c b/plugins/check_by_ssh.c index 1211daa3..8527b727 100644 --- a/plugins/check_by_ssh.c +++ b/plugins/check_by_ssh.c | |||
@@ -1,25 +1,19 @@ | |||
1 | /****************************************************************************** | 1 | /****************************************************************************** |
2 | * | 2 | |
3 | * This file is part of the Nagios Plugins. | 3 | The Nagios Plugins are free software; you can redistribute them |
4 | * | 4 | and/or modify them under the terms of the GNU General Public |
5 | * Copyright (c) 1999, 2000, 2001 Karl DeBisschop <karl@debisschop.net> | 5 | License as published by the Free Software Foundation; either |
6 | * | 6 | version 2 of the License, or (at your option) any later version. |
7 | * The Nagios Plugins are free software; you can redistribute them | 7 | |
8 | * and/or modify them under the terms of the GNU General Public | 8 | This program is distributed in the hope that it will be useful, but |
9 | * License as published by the Free Software Foundation; either | 9 | WITHOUT ANY WARRANTY; without even the implied warranty of |
10 | * version 2 of the License, or (at your option) any later version. | 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
11 | * | 11 | General Public License for more details. |
12 | * This program is distributed in the hope that it will be useful, but | 12 | |
13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | 13 | You should have received a copy of the GNU General Public License |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 14 | along with this program; if not, write to the Free Software |
15 | * General Public License for more details. | 15 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
16 | * | 16 | |
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
20 | * | ||
21 | * $Id$ | ||
22 | * | ||
23 | *****************************************************************************/ | 17 | *****************************************************************************/ |
24 | 18 | ||
25 | const char *progname = "check_by_ssh"; | 19 | const char *progname = "check_by_ssh"; |
@@ -27,7 +21,6 @@ const char *revision = "$Revision$"; | |||
27 | const char *copyright = "2000-2003"; | 21 | const char *copyright = "2000-2003"; |
28 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; | 22 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; |
29 | 23 | ||
30 | #include "config.h" | ||
31 | #include "common.h" | 24 | #include "common.h" |
32 | #include "netutils.h" | 25 | #include "netutils.h" |
33 | #include "utils.h" | 26 | #include "utils.h" |
@@ -38,83 +31,10 @@ int validate_arguments (void); | |||
38 | void print_help (void); | 31 | void print_help (void); |
39 | void print_usage (void); | 32 | void print_usage (void); |
40 | 33 | ||
41 | void | ||
42 | print_help (void) | ||
43 | { | ||
44 | print_revision (progname, revision); | ||
45 | |||
46 | printf (_(COPYRIGHT), copyright, email); | ||
47 | |||
48 | printf (_("This plugin uses SSH to execute commands on a remote host\n\n")); | ||
49 | |||
50 | print_usage (); | ||
51 | |||
52 | printf (_(UT_HELP_VRSN)); | ||
53 | |||
54 | printf (_(UT_HOST_PORT), 'p', "none"); | ||
55 | |||
56 | printf (_(UT_IPv46)); | ||
57 | |||
58 | printf (_("\ | ||
59 | -1, --proto1\n\ | ||
60 | tell ssh to use Protocol 1\n\ | ||
61 | -2, --proto2\n\ | ||
62 | tell ssh to use Protocol 2\n\ | ||
63 | -f\n\ | ||
64 | tells ssh to fork rather than create a tty\n")); | ||
65 | |||
66 | printf (_("\ | ||
67 | -C, --command='COMMAND STRING'\n\ | ||
68 | command to execute on the remote machine\n\ | ||
69 | -l, --logname=USERNAME\n\ | ||
70 | SSH user name on remote host [optional]\n\ | ||
71 | -i, --identity=KEYFILE\n\ | ||
72 | identity of an authorized key [optional]\n\ | ||
73 | -O, --output=FILE\n\ | ||
74 | external command file for nagios [optional]\n\ | ||
75 | -s, --services=LIST\n\ | ||
76 | list of nagios service names, separated by ':' [optional]\n\ | ||
77 | -n, --name=NAME\n\ | ||
78 | short name of host in nagios configuration [optional]\n")); | ||
79 | |||
80 | printf (_(UT_WARN_CRIT)); | ||
81 | |||
82 | printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT); | ||
83 | |||
84 | printf (_("\n\ | ||
85 | The most common mode of use is to refer to a local identity file with\n\ | ||
86 | the '-i' option. In this mode, the identity pair should have a null\n\ | ||
87 | passphrase and the public key should be listed in the authorized_keys\n\ | ||
88 | file of the remote host. Usually the key will be restricted to running\n\ | ||
89 | only one command on the remote server. If the remote SSH server tracks\n\ | ||
90 | invocation agruments, the one remote program may be an agent that can\n\ | ||
91 | execute additional commands as proxy\n")); | ||
92 | |||
93 | printf (_("\n\ | ||
94 | To use passive mode, provide multiple '-C' options, and provide\n\ | ||
95 | all of -O, -s, and -n options (servicelist order must match '-C'\n\ | ||
96 | options)\n")); | ||
97 | } | ||
98 | |||
99 | |||
100 | |||
101 | |||
102 | |||
103 | void | ||
104 | print_usage (void) | ||
105 | { | ||
106 | printf (_("Usage:\n\ | ||
107 | check_by_ssh [-f46] [-t timeout] [-i identity] [-l user] -H <host> -C <command>\n\ | ||
108 | [-n name] [-s servicelist] [-O outputfile] [-p port]\n\ | ||
109 | check_by_ssh -V prints version info\n\ | ||
110 | check_by_ssh -h prints more detailed help\n")); | ||
111 | } | ||
112 | |||
113 | |||
114 | int commands = 0; | 34 | int commands = 0; |
115 | int services = 0; | 35 | int services = 0; |
116 | char *remotecmd = ""; | 36 | char *remotecmd = NULL; |
117 | char *comm = SSH_COMMAND; | 37 | char *comm = NULL; |
118 | char *hostname = NULL; | 38 | char *hostname = NULL; |
119 | char *outputfile = NULL; | 39 | char *outputfile = NULL; |
120 | char *host_shortname = NULL; | 40 | char *host_shortname = NULL; |
@@ -123,20 +43,26 @@ int passive = FALSE; | |||
123 | int verbose = FALSE; | 43 | int verbose = FALSE; |
124 | 44 | ||
125 | 45 | ||
46 | |||
47 | |||
48 | |||
49 | |||
126 | int | 50 | int |
127 | main (int argc, char **argv) | 51 | main (int argc, char **argv) |
128 | { | 52 | { |
129 | 53 | ||
130 | char input_buffer[MAX_INPUT_BUFFER]; | 54 | char input_buffer[MAX_INPUT_BUFFER]; |
131 | char *result_text = ""; | 55 | char *result_text; |
132 | char *status_text; | 56 | char *status_text; |
133 | char *output = ""; | 57 | char *output; |
134 | char *eol = NULL; | 58 | char *eol = NULL; |
135 | int cresult; | 59 | int cresult; |
136 | int result = STATE_UNKNOWN; | 60 | int result = STATE_UNKNOWN; |
137 | time_t local_time; | 61 | time_t local_time; |
138 | FILE *fp = NULL; | 62 | FILE *fp = NULL; |
139 | 63 | ||
64 | asprintf (&remotecmd, "%s", ""); | ||
65 | asprintf (&comm, "%s", SSH_COMMAND); | ||
140 | 66 | ||
141 | /* process arguments */ | 67 | /* process arguments */ |
142 | if (process_arguments (argc, argv) == ERROR) | 68 | if (process_arguments (argc, argv) == ERROR) |
@@ -235,6 +161,7 @@ main (int argc, char **argv) | |||
235 | 161 | ||
236 | 162 | ||
237 | 163 | ||
164 | |||
238 | /* process command-line arguments */ | 165 | /* process command-line arguments */ |
239 | int | 166 | int |
240 | process_arguments (int argc, char **argv) | 167 | process_arguments (int argc, char **argv) |
@@ -392,3 +319,81 @@ validate_arguments (void) | |||
392 | 319 | ||
393 | return OK; | 320 | return OK; |
394 | } | 321 | } |
322 | |||
323 | |||
324 | |||
325 | |||
326 | |||
327 | |||
328 | void | ||
329 | print_help (void) | ||
330 | { | ||
331 | print_revision (progname, revision); | ||
332 | |||
333 | printf (_("Copyright (c) 1999 Karl DeBisschop <kdebisschop@users.sourceforge.net>\n")); | ||
334 | printf (_(COPYRIGHT), copyright, email); | ||
335 | |||
336 | printf (_("This plugin uses SSH to execute commands on a remote host\n\n")); | ||
337 | |||
338 | print_usage (); | ||
339 | |||
340 | printf (_(UT_HELP_VRSN)); | ||
341 | |||
342 | printf (_(UT_HOST_PORT), 'p', "none"); | ||
343 | |||
344 | printf (_(UT_IPv46)); | ||
345 | |||
346 | printf (_("\ | ||
347 | -1, --proto1\n\ | ||
348 | tell ssh to use Protocol 1\n\ | ||
349 | -2, --proto2\n\ | ||
350 | tell ssh to use Protocol 2\n\ | ||
351 | -f\n\ | ||
352 | tells ssh to fork rather than create a tty\n")); | ||
353 | |||
354 | printf (_("\ | ||
355 | -C, --command='COMMAND STRING'\n\ | ||
356 | command to execute on the remote machine\n\ | ||
357 | -l, --logname=USERNAME\n\ | ||
358 | SSH user name on remote host [optional]\n\ | ||
359 | -i, --identity=KEYFILE\n\ | ||
360 | identity of an authorized key [optional]\n\ | ||
361 | -O, --output=FILE\n\ | ||
362 | external command file for nagios [optional]\n\ | ||
363 | -s, --services=LIST\n\ | ||
364 | list of nagios service names, separated by ':' [optional]\n\ | ||
365 | -n, --name=NAME\n\ | ||
366 | short name of host in nagios configuration [optional]\n")); | ||
367 | |||
368 | printf (_(UT_WARN_CRIT)); | ||
369 | |||
370 | printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT); | ||
371 | |||
372 | printf (_("\n\ | ||
373 | The most common mode of use is to refer to a local identity file with\n\ | ||
374 | the '-i' option. In this mode, the identity pair should have a null\n\ | ||
375 | passphrase and the public key should be listed in the authorized_keys\n\ | ||
376 | file of the remote host. Usually the key will be restricted to running\n\ | ||
377 | only one command on the remote server. If the remote SSH server tracks\n\ | ||
378 | invocation agruments, the one remote program may be an agent that can\n\ | ||
379 | execute additional commands as proxy\n")); | ||
380 | |||
381 | printf (_("\n\ | ||
382 | To use passive mode, provide multiple '-C' options, and provide\n\ | ||
383 | all of -O, -s, and -n options (servicelist order must match '-C'\n\ | ||
384 | options)\n")); | ||
385 | } | ||
386 | |||
387 | |||
388 | |||
389 | |||
390 | |||
391 | void | ||
392 | print_usage (void) | ||
393 | { | ||
394 | printf (_("\n\ | ||
395 | Usage: %s [-f46] [-t timeout] [-i identity] [-l user] -H <host> \n\ | ||
396 | -C <command> [-n name] [-s servicelist] [-O outputfile] [-p port]\n"), | ||
397 | progname); | ||
398 | printf (_(UT_HLP_VRS), progname, progname); | ||
399 | } | ||
diff --git a/plugins/check_disk.c b/plugins/check_disk.c index b0b0d2a5..7feb5a57 100644 --- a/plugins/check_disk.c +++ b/plugins/check_disk.c | |||
@@ -35,80 +35,6 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net"; | |||
35 | # include <limits.h> | 35 | # include <limits.h> |
36 | #endif | 36 | #endif |
37 | 37 | ||
38 | void | ||
39 | print_usage (void) | ||
40 | { | ||
41 | printf (_("\ | ||
42 | Usage: %s -w limit -c limit [-p path | -x device] [-t timeout] [-m] [-e]\n\ | ||
43 | [-v] [-q]\n\ | ||
44 | %s (-h|--help)\n\ | ||
45 | %s (-V|--version)\n"), | ||
46 | progname, progname, progname); | ||
47 | } | ||
48 | |||
49 | void | ||
50 | print_help (void) | ||
51 | { | ||
52 | print_revision (progname, revision); | ||
53 | |||
54 | printf (_(COPYRIGHT), copyright, email); | ||
55 | |||
56 | printf (_("\ | ||
57 | This plugin checks the amount of used disk space on a mounted file system\n\ | ||
58 | and generates an alert if free space is less than one of the threshold values.")); | ||
59 | |||
60 | print_usage (); | ||
61 | |||
62 | printf (_(UT_HELP_VRSN)); | ||
63 | |||
64 | printf (_("\ | ||
65 | -w, --warning=INTEGER\n\ | ||
66 | Exit with WARNING status if less than INTEGER kilobytes of disk are free\n\ | ||
67 | -w, --warning=PERCENT%%\n\ | ||
68 | Exit with WARNING status if less than PERCENT of disk space is free\n\ | ||
69 | -c, --critical=INTEGER\n\ | ||
70 | Exit with CRITICAL status if less than INTEGER kilobytes of disk are free\n\ | ||
71 | -c, --critical=PERCENT%%\n\ | ||
72 | Exit with CRITCAL status if less than PERCENT of disk space is free\n\ | ||
73 | -C, --clear\n\ | ||
74 | Clear thresholds\n")); | ||
75 | |||
76 | printf (_("\ | ||
77 | -u, --units=STRING\n\ | ||
78 | Choose bytes, kB, MB, GB, TB (default: MB)\n\ | ||
79 | -k, --kilobytes\n\ | ||
80 | Same as '--units kB'\n\ | ||
81 | -m, --megabytes\n\ | ||
82 | Same as '--units MB'\n")); | ||
83 | |||
84 | printf (_("\ | ||
85 | -l, --local\n\ | ||
86 | Only check local filesystems\n\ | ||
87 | -p, --path=PATH, --partition=PARTITION\n\ | ||
88 | Path or partition (may be repeated)\n\ | ||
89 | -x, --exclude_device=PATH <STRING>\n\ | ||
90 | Ignore device (only works if -p unspecified)\n\ | ||
91 | -X, --exclude-type=TYPE <STRING>\n\ | ||
92 | Ignore all filesystems of indicated type (may be repeated)\n\ | ||
93 | -M, --mountpoint\n\ | ||
94 | Display the mountpoint instead of the partition\n\ | ||
95 | -e, --errors-only\n\ | ||
96 | Display only devices/mountpoints with errors\n")); | ||
97 | |||
98 | printf (_(UT_WARN_CRIT)); | ||
99 | |||
100 | printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT); | ||
101 | |||
102 | printf (_(UT_VERBOSE)); | ||
103 | |||
104 | printf ("%s", _("Examples:\n\ | ||
105 | check_disk -w 10% -c 5% -p /tmp -p /var -C -w 100000 -c 50000 -p /\n\ | ||
106 | Checks /tmp and /var at 10%,5% and / at 100MB, 50MB\n")); | ||
107 | |||
108 | support (); | ||
109 | } | ||
110 | |||
111 | |||
112 | /* If nonzero, show inode information. */ | 38 | /* If nonzero, show inode information. */ |
113 | /* static int inode_format; */ | 39 | /* static int inode_format; */ |
114 | 40 | ||
@@ -135,8 +61,8 @@ struct name_list | |||
135 | { | 61 | { |
136 | char *name; | 62 | char *name; |
137 | int found; | 63 | int found; |
138 | int w_df; | 64 | uintmax_t w_df; |
139 | int c_df; | 65 | uintmax_t c_df; |
140 | double w_dfp; | 66 | double w_dfp; |
141 | double c_dfp; | 67 | double c_dfp; |
142 | struct name_list *name_next; | 68 | struct name_list *name_next; |
@@ -183,18 +109,21 @@ enum | |||
183 | #endif | 109 | #endif |
184 | 110 | ||
185 | int process_arguments (int, char **); | 111 | int process_arguments (int, char **); |
186 | int validate_arguments (int, int, double, double, char *); | 112 | void print_path (char *mypath); |
187 | int check_disk (int usp, int free_disk); | 113 | int validate_arguments (uintmax_t, uintmax_t, double, double, char *); |
114 | int check_disk (int usp, uintmax_t free_disk); | ||
188 | int walk_name_list (struct name_list *list, const char *name); | 115 | int walk_name_list (struct name_list *list, const char *name); |
116 | void print_help (void); | ||
117 | void print_usage (void); | ||
189 | 118 | ||
190 | int w_df = -1; | 119 | uintmax_t w_df = 0; |
191 | int c_df = -1; | 120 | uintmax_t c_df = 0; |
192 | double w_dfp = -1.0; | 121 | double w_dfp = -1.0; |
193 | double c_dfp = -1.0; | 122 | double c_dfp = -1.0; |
194 | char *path = ""; | 123 | char *path = ""; |
195 | char *exclude_device = ""; | 124 | char *exclude_device = ""; |
196 | char *units = "MB"; | 125 | char *units = NULL; |
197 | unsigned long mult = 1024 * 1024; | 126 | uintmax_t mult = 1024 * 1024; |
198 | int verbose = 0; | 127 | int verbose = 0; |
199 | int erronly = FALSE; | 128 | int erronly = FALSE; |
200 | int display_mntp = FALSE; | 129 | int display_mntp = FALSE; |
@@ -202,10 +131,12 @@ int display_mntp = FALSE; | |||
202 | /* Linked list of mounted filesystems. */ | 131 | /* Linked list of mounted filesystems. */ |
203 | static struct mount_entry *mount_list; | 132 | static struct mount_entry *mount_list; |
204 | 133 | ||
134 | |||
135 | |||
205 | int | 136 | int |
206 | main (int argc, char **argv) | 137 | main (int argc, char **argv) |
207 | { | 138 | { |
208 | int usp = -1; | 139 | double usp = -1.0; |
209 | int result = STATE_UNKNOWN; | 140 | int result = STATE_UNKNOWN; |
210 | int disk_result = STATE_UNKNOWN; | 141 | int disk_result = STATE_UNKNOWN; |
211 | char file_system[MAX_INPUT_BUFFER]; | 142 | char file_system[MAX_INPUT_BUFFER]; |
@@ -244,7 +175,7 @@ main (int argc, char **argv) | |||
244 | get_fs_usage (me->me_mountdir, me->me_devname, &fsp); | 175 | get_fs_usage (me->me_mountdir, me->me_devname, &fsp); |
245 | 176 | ||
246 | if (fsp.fsu_blocks && strcmp ("none", me->me_mountdir)) { | 177 | if (fsp.fsu_blocks && strcmp ("none", me->me_mountdir)) { |
247 | usp = (fsp.fsu_blocks - fsp.fsu_bavail) * 100 / fsp.fsu_blocks; | 178 | usp = (double)(fsp.fsu_blocks - fsp.fsu_bavail) * 100 / fsp.fsu_blocks; |
248 | disk_result = check_disk (usp, fsp.fsu_bavail); | 179 | disk_result = check_disk (usp, fsp.fsu_bavail); |
249 | result = max_state (disk_result, result); | 180 | result = max_state (disk_result, result); |
250 | if (disk_result==STATE_OK && erronly && !verbose) | 181 | if (disk_result==STATE_OK && erronly && !verbose) |
@@ -364,7 +295,7 @@ process_arguments (int argc, char **argv) | |||
364 | } | 295 | } |
365 | else if (strpbrk (optarg, ",:") && | 296 | else if (strpbrk (optarg, ",:") && |
366 | strstr (optarg, "%") && | 297 | strstr (optarg, "%") && |
367 | sscanf (optarg, "%d%*[:,]%lf%%", &w_df, &w_dfp) == 2) { | 298 | sscanf (optarg, "%ul%*[:,]%lf%%", &w_df, &w_dfp) == 2) { |
368 | break; | 299 | break; |
369 | } | 300 | } |
370 | else if (strstr (optarg, "%") && sscanf (optarg, "%lf%%", &w_dfp) == 1) { | 301 | else if (strstr (optarg, "%") && sscanf (optarg, "%lf%%", &w_dfp) == 1) { |
@@ -380,7 +311,7 @@ process_arguments (int argc, char **argv) | |||
380 | } | 311 | } |
381 | else if (strpbrk (optarg, ",:") && | 312 | else if (strpbrk (optarg, ",:") && |
382 | strstr (optarg, "%") && | 313 | strstr (optarg, "%") && |
383 | sscanf (optarg, "%d%*[,:]%lf%%", &c_df, &c_dfp) == 2) { | 314 | sscanf (optarg, "%ul%*[,:]%lf%%", &c_df, &c_dfp) == 2) { |
384 | break; | 315 | break; |
385 | } | 316 | } |
386 | else if (strstr (optarg, "%") && sscanf (optarg, "%lf%%", &c_dfp) == 1) { | 317 | else if (strstr (optarg, "%") && sscanf (optarg, "%lf%%", &c_dfp) == 1) { |
@@ -391,19 +322,19 @@ process_arguments (int argc, char **argv) | |||
391 | } | 322 | } |
392 | case 'u': | 323 | case 'u': |
393 | if (! strcmp (optarg, "bytes")) { | 324 | if (! strcmp (optarg, "bytes")) { |
394 | mult = 1; | 325 | mult = (uintmax_t)1; |
395 | units = "B"; | 326 | units = "B"; |
396 | } else if (! strcmp (optarg, "kB")) { | 327 | } else if (! strcmp (optarg, "kB")) { |
397 | mult = 1024; | 328 | mult = (uintmax_t)1024; |
398 | units = "kB"; | 329 | units = "kB"; |
399 | } else if (! strcmp (optarg, "MB")) { | 330 | } else if (! strcmp (optarg, "MB")) { |
400 | mult = 1024 * 1024; | 331 | mult = (uintmax_t)1024 * 1024; |
401 | units = "MB"; | 332 | units = "MB"; |
402 | } else if (! strcmp (optarg, "GB")) { | 333 | } else if (! strcmp (optarg, "GB")) { |
403 | mult = 1024 * 1024 * 1024; | 334 | mult = (uintmax_t)1024 * 1024 * 1024; |
404 | units = "GB"; | 335 | units = "GB"; |
405 | } else if (! strcmp (optarg, "TB")) { | 336 | } else if (! strcmp (optarg, "TB")) { |
406 | mult = (unsigned long)1024 * 1024 * 1024 * 1024; | 337 | mult = (uintmax_t)1024 * 1024 * 1024 * 1024; |
407 | units = "TB"; | 338 | units = "TB"; |
408 | } else { | 339 | } else { |
409 | die (STATE_UNKNOWN, _("unit type %s not known\n"), optarg); | 340 | die (STATE_UNKNOWN, _("unit type %s not known\n"), optarg); |
@@ -458,8 +389,8 @@ process_arguments (int argc, char **argv) | |||
458 | display_mntp = TRUE; | 389 | display_mntp = TRUE; |
459 | break; | 390 | break; |
460 | case 'C': | 391 | case 'C': |
461 | w_df = -1; | 392 | w_df = 0; |
462 | c_df = -1; | 393 | c_df = 0; |
463 | w_dfp = -1.0; | 394 | w_dfp = -1.0; |
464 | c_dfp = -1.0; | 395 | c_dfp = -1.0; |
465 | break; | 396 | break; |
@@ -477,10 +408,10 @@ process_arguments (int argc, char **argv) | |||
477 | 408 | ||
478 | /* Support for "check_disk warn crit [fs]" with thresholds at used level */ | 409 | /* Support for "check_disk warn crit [fs]" with thresholds at used level */ |
479 | c = optind; | 410 | c = optind; |
480 | if (w_dfp == -1 && argc > c && is_intnonneg (argv[c])) | 411 | if (w_dfp < 0 && argc > c && is_intnonneg (argv[c])) |
481 | w_dfp = (100.0 - atof (argv[c++])); | 412 | w_dfp = (100.0 - atof (argv[c++])); |
482 | 413 | ||
483 | if (c_dfp == -1 && argc > c && is_intnonneg (argv[c])) | 414 | if (c_dfp < 0 && argc > c && is_intnonneg (argv[c])) |
484 | c_dfp = (100.0 - atof (argv[c++])); | 415 | c_dfp = (100.0 - atof (argv[c++])); |
485 | 416 | ||
486 | if (argc > c && strlen (path) == 0) { | 417 | if (argc > c && strlen (path) == 0) { |
@@ -520,9 +451,9 @@ void print_path (char *mypath) | |||
520 | } | 451 | } |
521 | 452 | ||
522 | int | 453 | int |
523 | validate_arguments (int w, int c, double wp, double cp, char *mypath) | 454 | validate_arguments (uintmax_t w, uintmax_t c, double wp, double cp, char *mypath) |
524 | { | 455 | { |
525 | if (w < 0 && c < 0 && wp < 0.0 && cp < 0.0) { | 456 | if (w == 0 && c == 0 && wp < 0.0 && cp < 0.0) { |
526 | printf (_("INPUT ERROR: No thresholds specified")); | 457 | printf (_("INPUT ERROR: No thresholds specified")); |
527 | print_path (mypath); | 458 | print_path (mypath); |
528 | return ERROR; | 459 | return ERROR; |
@@ -535,10 +466,10 @@ INPUT ERROR: C_DFP (%f) should be less than W_DFP (%.1f) and both should be betw | |||
535 | print_path (path); | 466 | print_path (path); |
536 | return ERROR; | 467 | return ERROR; |
537 | } | 468 | } |
538 | else if ((w > 0 || c > 0) && (w < 0 || c < 0 || c > w)) { | 469 | else if ((w > 0 || c > 0) && (w == 0 || c == 0 || c > w)) { |
539 | printf (_("\ | 470 | printf (_("\ |
540 | INPUT ERROR: C_DF (%d) should be less than W_DF (%d) and both should be greater than zero"), | 471 | INPUT ERROR: C_DF (%lu) should be less than W_DF (%lu) and both should be greater than zero"), |
541 | c, w); | 472 | (unsigned long)c, (unsigned long)w); |
542 | print_path (path); | 473 | print_path (path); |
543 | return ERROR; | 474 | return ERROR; |
544 | } | 475 | } |
@@ -551,17 +482,17 @@ INPUT ERROR: C_DF (%d) should be less than W_DF (%d) and both should be greater | |||
551 | 482 | ||
552 | 483 | ||
553 | int | 484 | int |
554 | check_disk (int usp, int free_disk) | 485 | check_disk (int usp, uintmax_t free_disk) |
555 | { | 486 | { |
556 | int result = STATE_UNKNOWN; | 487 | int result = STATE_UNKNOWN; |
557 | /* check the percent used space against thresholds */ | 488 | /* check the percent used space against thresholds */ |
558 | if (usp >= 0 && usp >= (100.0 - c_dfp)) | 489 | if (usp >= 0.0 && usp >= (100.0 - c_dfp)) |
559 | result = STATE_CRITICAL; | 490 | result = STATE_CRITICAL; |
560 | else if (c_df >= 0 && free_disk <= c_df) | 491 | else if (c_df > 0 && free_disk <= c_df) |
561 | result = STATE_CRITICAL; | 492 | result = STATE_CRITICAL; |
562 | else if (usp >= 0 && usp >= (100.0 - w_dfp)) | 493 | else if (usp >= 0.0 && usp >= (100.0 - w_dfp)) |
563 | result = STATE_WARNING; | 494 | result = STATE_WARNING; |
564 | else if (w_df >= 0 && free_disk <= w_df) | 495 | else if (w_df > 0 && free_disk <= w_df) |
565 | result = STATE_WARNING; | 496 | result = STATE_WARNING; |
566 | else if (usp >= 0.0) | 497 | else if (usp >= 0.0) |
567 | result = STATE_OK; | 498 | result = STATE_OK; |
@@ -579,11 +510,92 @@ walk_name_list (struct name_list *list, const char *name) | |||
579 | /* if required for name_lists that have not saved w_df, etc (eg exclude lists) */ | 510 | /* if required for name_lists that have not saved w_df, etc (eg exclude lists) */ |
580 | if (list->w_df) w_df = list->w_df; | 511 | if (list->w_df) w_df = list->w_df; |
581 | if (list->c_df) c_df = list->c_df; | 512 | if (list->c_df) c_df = list->c_df; |
582 | if (list->w_dfp) w_dfp = list->w_dfp; | 513 | if (list->w_dfp>=0.0) w_dfp = list->w_dfp; |
583 | if (list->c_dfp) c_dfp = list->c_dfp; | 514 | if (list->c_dfp>=0.0) c_dfp = list->c_dfp; |
584 | return TRUE; | 515 | return TRUE; |
585 | } | 516 | } |
586 | list = list->name_next; | 517 | list = list->name_next; |
587 | } | 518 | } |
588 | return FALSE; | 519 | return FALSE; |
589 | } | 520 | } |
521 | |||
522 | |||
523 | |||
524 | |||
525 | |||
526 | |||
527 | void | ||
528 | print_help (void) | ||
529 | { | ||
530 | print_revision (progname, revision); | ||
531 | |||
532 | printf (_(COPYRIGHT), copyright, email); | ||
533 | |||
534 | printf (_("\ | ||
535 | This plugin checks the amount of used disk space on a mounted file system\n\ | ||
536 | and generates an alert if free space is less than one of the threshold values.")); | ||
537 | |||
538 | print_usage (); | ||
539 | |||
540 | printf (_(UT_HELP_VRSN)); | ||
541 | |||
542 | printf (_("\ | ||
543 | -w, --warning=INTEGER\n\ | ||
544 | Exit with WARNING status if less than INTEGER kilobytes of disk are free\n\ | ||
545 | -w, --warning=PERCENT%%\n\ | ||
546 | Exit with WARNING status if less than PERCENT of disk space is free\n\ | ||
547 | -c, --critical=INTEGER\n\ | ||
548 | Exit with CRITICAL status if less than INTEGER kilobytes of disk are free\n\ | ||
549 | -c, --critical=PERCENT%%\n\ | ||
550 | Exit with CRITCAL status if less than PERCENT of disk space is free\n\ | ||
551 | -C, --clear\n\ | ||
552 | Clear thresholds\n")); | ||
553 | |||
554 | printf (_("\ | ||
555 | -u, --units=STRING\n\ | ||
556 | Choose bytes, kB, MB, GB, TB (default: MB)\n\ | ||
557 | -k, --kilobytes\n\ | ||
558 | Same as '--units kB'\n\ | ||
559 | -m, --megabytes\n\ | ||
560 | Same as '--units MB'\n")); | ||
561 | |||
562 | printf (_("\ | ||
563 | -l, --local\n\ | ||
564 | Only check local filesystems\n\ | ||
565 | -p, --path=PATH, --partition=PARTITION\n\ | ||
566 | Path or partition (may be repeated)\n\ | ||
567 | -x, --exclude_device=PATH <STRING>\n\ | ||
568 | Ignore device (only works if -p unspecified)\n\ | ||
569 | -X, --exclude-type=TYPE <STRING>\n\ | ||
570 | Ignore all filesystems of indicated type (may be repeated)\n\ | ||
571 | -M, --mountpoint\n\ | ||
572 | Display the mountpoint instead of the partition\n\ | ||
573 | -e, --errors-only\n\ | ||
574 | Display only devices/mountpoints with errors\n")); | ||
575 | |||
576 | printf (_(UT_WARN_CRIT)); | ||
577 | |||
578 | printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT); | ||
579 | |||
580 | printf (_(UT_VERBOSE)); | ||
581 | |||
582 | printf ("%s", _("Examples:\n\ | ||
583 | check_disk -w 10% -c 5% -p /tmp -p /var -C -w 100000 -c 50000 -p /\n\ | ||
584 | Checks /tmp and /var at 10%,5% and / at 100MB, 50MB\n")); | ||
585 | |||
586 | support (); | ||
587 | } | ||
588 | |||
589 | |||
590 | |||
591 | |||
592 | void | ||
593 | print_usage (void) | ||
594 | { | ||
595 | printf (_("\ | ||
596 | Usage: %s -w limit -c limit [-p path | -x device] [-t timeout] [-m] [-e]\n\ | ||
597 | [-v] [-q]\n\ | ||
598 | %s (-h|--help)\n\ | ||
599 | %s (-V|--version)\n"), | ||
600 | progname, progname, progname); | ||
601 | } | ||
diff --git a/plugins/check_nt.c b/plugins/check_nt.c index 91022bac..22e7757d 100644 --- a/plugins/check_nt.c +++ b/plugins/check_nt.c | |||
@@ -65,7 +65,7 @@ const char *progname = "check_nt"; | |||
65 | 65 | ||
66 | int process_arguments(int, char **); | 66 | int process_arguments(int, char **); |
67 | void preparelist(char *string); | 67 | void preparelist(char *string); |
68 | int strtoularray(unsigned long *array, char *string, char *delim); | 68 | int strtoularray(unsigned long *array, char *string, const char *delim); |
69 | void print_help(void); | 69 | void print_help(void); |
70 | void print_usage(void); | 70 | void print_usage(void); |
71 | 71 | ||
@@ -117,7 +117,7 @@ int main(int argc, char **argv){ | |||
117 | else if(vars_to_check==CHECK_CPULOAD){ | 117 | else if(vars_to_check==CHECK_CPULOAD){ |
118 | 118 | ||
119 | if (check_value_list==TRUE) { | 119 | if (check_value_list==TRUE) { |
120 | if (strtoularray(&lvalue_list,value_list,",")==TRUE) { | 120 | if (strtoularray(lvalue_list,value_list,",")==TRUE) { |
121 | /* -l parameters is present with only integers */ | 121 | /* -l parameters is present with only integers */ |
122 | return_code=STATE_OK; | 122 | return_code=STATE_OK; |
123 | asprintf(&temp_string,_("CPU Load")); | 123 | asprintf(&temp_string,_("CPU Load")); |
@@ -514,7 +514,7 @@ int process_arguments(int argc, char **argv){ | |||
514 | 514 | ||
515 | 515 | ||
516 | 516 | ||
517 | int strtoularray(unsigned long *array, char *string, char *delim) { | 517 | int strtoularray(unsigned long *array, char *string, const char *delim) { |
518 | /* split a <delim> delimited string into a long array */ | 518 | /* split a <delim> delimited string into a long array */ |
519 | int idx=0; | 519 | int idx=0; |
520 | char *t1; | 520 | char *t1; |
diff --git a/plugins/netutils.c b/plugins/netutils.c index 4ca3168d..92fd1420 100644 --- a/plugins/netutils.c +++ b/plugins/netutils.c | |||
@@ -32,7 +32,7 @@ | |||
32 | #include "common.h" | 32 | #include "common.h" |
33 | #include "netutils.h" | 33 | #include "netutils.h" |
34 | 34 | ||
35 | int socket_timeout = DEFAULT_SOCKET_TIMEOUT; | 35 | unsigned int socket_timeout = DEFAULT_SOCKET_TIMEOUT; |
36 | int econn_refuse_state = STATE_CRITICAL; | 36 | int econn_refuse_state = STATE_CRITICAL; |
37 | int was_refused = FALSE; | 37 | int was_refused = FALSE; |
38 | int address_family = AF_UNSPEC; | 38 | int address_family = AF_UNSPEC; |
@@ -131,7 +131,7 @@ process_tcp_request2 (char *server_address, int server_port, | |||
131 | else { /* it has */ | 131 | else { /* it has */ |
132 | recv_result = | 132 | recv_result = |
133 | recv (sd, recv_buffer + recv_length, | 133 | recv (sd, recv_buffer + recv_length, |
134 | recv_size - recv_length - 1, 0); | 134 | (size_t)recv_size - recv_length - 1, 0); |
135 | if (recv_result == -1) { | 135 | if (recv_result == -1) { |
136 | /* recv failed, bail out */ | 136 | /* recv failed, bail out */ |
137 | strcpy (recv_buffer + recv_length, ""); | 137 | strcpy (recv_buffer + recv_length, ""); |
@@ -201,7 +201,7 @@ process_request (char *server_address, int server_port, int proto, | |||
201 | } | 201 | } |
202 | 202 | ||
203 | else { | 203 | else { |
204 | recv_result = recv (sd, recv_buffer, recv_size - 1, 0); | 204 | recv_result = recv (sd, recv_buffer, (size_t)recv_size - 1, 0); |
205 | if (recv_result == -1) { | 205 | if (recv_result == -1) { |
206 | strcpy (recv_buffer, ""); | 206 | strcpy (recv_buffer, ""); |
207 | if (proto != IPPROTO_TCP) | 207 | if (proto != IPPROTO_TCP) |
diff --git a/plugins/netutils.h b/plugins/netutils.h index 8f534976..f5df7af6 100644 --- a/plugins/netutils.h +++ b/plugins/netutils.h | |||
@@ -34,7 +34,7 @@ | |||
34 | #include <netinet/in.h> | 34 | #include <netinet/in.h> |
35 | #include <arpa/inet.h> | 35 | #include <arpa/inet.h> |
36 | 36 | ||
37 | RETSIGTYPE socket_timeout_alarm_handler (int); | 37 | RETSIGTYPE socket_timeout_alarm_handler (int) __attribute__((noreturn)); |
38 | 38 | ||
39 | int process_tcp_request2 (char *address, int port, char *sbuffer, | 39 | int process_tcp_request2 (char *address, int port, char *sbuffer, |
40 | char *rbuffer, int rsize); | 40 | char *rbuffer, int rsize); |
@@ -58,7 +58,7 @@ int is_inet6_addr (char *); | |||
58 | #endif | 58 | #endif |
59 | int is_hostname (char *); | 59 | int is_hostname (char *); |
60 | 60 | ||
61 | extern int socket_timeout; | 61 | extern unsigned int socket_timeout; |
62 | extern int econn_refuse_state; | 62 | extern int econn_refuse_state; |
63 | extern int was_refused; | 63 | extern int was_refused; |
64 | extern int address_family; | 64 | extern int address_family; |
diff --git a/plugins/popen.h b/plugins/popen.h index a1af4be0..b7585792 100644 --- a/plugins/popen.h +++ b/plugins/popen.h | |||
@@ -2,7 +2,7 @@ FILE *spopen (const char *); | |||
2 | int spclose (FILE *); | 2 | int spclose (FILE *); |
3 | RETSIGTYPE popen_timeout_alarm_handler (int); | 3 | RETSIGTYPE popen_timeout_alarm_handler (int); |
4 | 4 | ||
5 | extern int timeout_interval; | 5 | extern unsigned int timeout_interval; |
6 | pid_t *childpid; | 6 | pid_t *childpid; |
7 | int *child_stderr_array; | 7 | int *child_stderr_array; |
8 | FILE *child_process; | 8 | FILE *child_process; |
diff --git a/plugins/utils.h b/plugins/utils.h index f36834f9..9dc2654c 100644 --- a/plugins/utils.h +++ b/plugins/utils.h | |||
@@ -16,16 +16,16 @@ suite of plugins. */ | |||
16 | void support (void); | 16 | void support (void); |
17 | char *clean_revstring (const char *revstring); | 17 | char *clean_revstring (const char *revstring); |
18 | void print_revision (const char *, const char *); | 18 | void print_revision (const char *, const char *); |
19 | void die (int result, const char *fmt, ...); | 19 | void die (int result, const char *fmt, ...) __attribute__((noreturn)); |
20 | 20 | ||
21 | /* Handle timeouts */ | 21 | /* Handle timeouts */ |
22 | 22 | ||
23 | #ifdef LOCAL_TIMEOUT_ALARM_HANDLER | 23 | #ifdef LOCAL_TIMEOUT_ALARM_HANDLER |
24 | extern int timeout_interval; | 24 | extern unsigned int timeout_interval; |
25 | RETSIGTYPE timeout_alarm_handler (int); | 25 | RETSIGTYPE timeout_alarm_handler (int) __attribute__((noreturn)); |
26 | #else | 26 | #else |
27 | int timeout_interval = DEFAULT_SOCKET_TIMEOUT; | 27 | unsigned int timeout_interval = DEFAULT_SOCKET_TIMEOUT; |
28 | extern RETSIGTYPE timeout_alarm_handler (int); | 28 | extern RETSIGTYPE timeout_alarm_handler (int) __attribute__((noreturn)); |
29 | #endif | 29 | #endif |
30 | 30 | ||
31 | time_t start_time, end_time; | 31 | time_t start_time, end_time; |
@@ -72,9 +72,9 @@ char *strpcat (char *dest, const char *src, const char *str); | |||
72 | 72 | ||
73 | int max_state (int a, int b); | 73 | int max_state (int a, int b); |
74 | 74 | ||
75 | void usage (char *msg); | 75 | void usage (char *msg) __attribute__((noreturn)); |
76 | void usage2(char *msg, char *arg); | 76 | void usage2(char *msg, char *arg) __attribute__((noreturn)); |
77 | void usage3(char *msg, char arg); | 77 | void usage3(char *msg, char arg) __attribute__((noreturn)); |
78 | 78 | ||
79 | char *state_text (int result); | 79 | char *state_text (int result); |
80 | 80 | ||