summaryrefslogtreecommitdiffstats
path: root/plugins/check_snmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/check_snmp.c')
-rw-r--r--plugins/check_snmp.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c
index ef411e15..0ef0c653 100644
--- a/plugins/check_snmp.c
+++ b/plugins/check_snmp.c
@@ -31,6 +31,8 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net";
31#define DEFAULT_PORT "161" 31#define DEFAULT_PORT "161"
32#define DEFAULT_MIBLIST "ALL" 32#define DEFAULT_MIBLIST "ALL"
33#define DEFAULT_PROTOCOL "1" 33#define DEFAULT_PROTOCOL "1"
34#define DEFAULT_TIMEOUT 1
35#define DEFAULT_RETRIES 5
34#define DEFAULT_AUTH_PROTOCOL "MD5" 36#define DEFAULT_AUTH_PROTOCOL "MD5"
35#define DEFAULT_DELIMITER "=" 37#define DEFAULT_DELIMITER "="
36#define DEFAULT_OUTPUT_DELIMITER " " 38#define DEFAULT_OUTPUT_DELIMITER " "
@@ -113,13 +115,12 @@ unsigned long upper_crit_lim[MAX_OIDS];
113unsigned long response_value[MAX_OIDS]; 115unsigned long response_value[MAX_OIDS];
114int check_warning_value = FALSE; 116int check_warning_value = FALSE;
115int check_critical_value = FALSE; 117int check_critical_value = FALSE;
118int retries = 0;
116unsigned long eval_method[MAX_OIDS]; 119unsigned long eval_method[MAX_OIDS];
117char *delimiter; 120char *delimiter;
118char *output_delim; 121char *output_delim;
119char *miblist; 122char *miblist;
120 123
121
122
123int 124int
124main (int argc, char **argv) 125main (int argc, char **argv)
125{ 126{
@@ -155,13 +156,15 @@ main (int argc, char **argv)
155 delimiter = strdup (DEFAULT_DELIMITER); 156 delimiter = strdup (DEFAULT_DELIMITER);
156 output_delim = strdup (DEFAULT_OUTPUT_DELIMITER); 157 output_delim = strdup (DEFAULT_OUTPUT_DELIMITER);
157 miblist = strdup (DEFAULT_MIBLIST); 158 miblist = strdup (DEFAULT_MIBLIST);
159 timeout_interval = DEFAULT_TIMEOUT;
160 retries = DEFAULT_RETRIES;
158 161
159 if (process_arguments (argc, argv) == ERROR) 162 if (process_arguments (argc, argv) == ERROR)
160 usage4 (_("Could not parse arguments")); 163 usage4 (_("Could not parse arguments"));
161 164
162 /* create the command line to execute */ 165 /* create the command line to execute */
163 asprintf (&command_line, "%s -t 1 -r %d -m %s -v %s %s %s:%s %s", 166 asprintf (&command_line, "%s -t %d -r %d -m %s -v %s %s %s:%s %s",
164 PATH_TO_SNMPGET, timeout_interval - 1, miblist, proto, 167 PATH_TO_SNMPGET, timeout_interval, retries, miblist, proto,
165 authpriv, server_address, port, oid); 168 authpriv, server_address, port, oid);
166 if (verbose) 169 if (verbose)
167 printf ("%s\n", command_line); 170 printf ("%s\n", command_line);
@@ -360,12 +363,14 @@ process_arguments (int argc, char **argv)
360 {"delimiter", required_argument, 0, 'd'}, 363 {"delimiter", required_argument, 0, 'd'},
361 {"output-delimiter", required_argument, 0, 'D'}, 364 {"output-delimiter", required_argument, 0, 'D'},
362 {"string", required_argument, 0, 's'}, 365 {"string", required_argument, 0, 's'},
366 {"timeout", required_argument, 0, 't'},
363 {"regex", required_argument, 0, 'r'}, 367 {"regex", required_argument, 0, 'r'},
364 {"ereg", required_argument, 0, 'r'}, 368 {"ereg", required_argument, 0, 'r'},
365 {"eregi", required_argument, 0, 'R'}, 369 {"eregi", required_argument, 0, 'R'},
366 {"label", required_argument, 0, 'l'}, 370 {"label", required_argument, 0, 'l'},
367 {"units", required_argument, 0, 'u'}, 371 {"units", required_argument, 0, 'u'},
368 {"port", required_argument, 0, 'p'}, 372 {"port", required_argument, 0, 'p'},
373 {"retries", required_argument, 0, 'e'},
369 {"miblist", required_argument, 0, 'm'}, 374 {"miblist", required_argument, 0, 'm'},
370 {"protocol", required_argument, 0, 'P'}, 375 {"protocol", required_argument, 0, 'P'},
371 {"seclevel", required_argument, 0, 'L'}, 376 {"seclevel", required_argument, 0, 'L'},
@@ -390,7 +395,7 @@ process_arguments (int argc, char **argv)
390 } 395 }
391 396
392 while (1) { 397 while (1) {
393 c = getopt_long (argc, argv, "hvVt:c:w:H:C:o:e:E:d:D:s:R:r:l:u:p:m:P:L:U:a:A:X:", 398 c = getopt_long (argc, argv, "hvVt:c:w:H:C:o:e:E:d:D:s:t:R:r:l:u:p:m:P:L:U:a:A:X:",
394 longopts, &option); 399 longopts, &option);
395 400
396 if (c == -1 || c == EOF) 401 if (c == -1 || c == EOF)
@@ -470,9 +475,14 @@ process_arguments (int argc, char **argv)
470 (ptr = index (ptr, ',')) ? ptr++ : ptr; 475 (ptr = index (ptr, ',')) ? ptr++ : ptr;
471 } 476 }
472 break; 477 break;
473 case 'o': /* object identifier */
474 case 'e': /* PRELIMINARY - may change */ 478 case 'e': /* PRELIMINARY - may change */
475 case 'E': /* PRELIMINARY - may change */ 479 case 'E': /* PRELIMINARY - may change */
480 if (!is_integer (optarg))
481 usage2 (_("Retries interval must be a positive integer"), optarg);
482 else
483 retries = atoi(optarg);
484 break;
485 case 'o': /* object identifier */
476 for (ptr = optarg; (ptr = index (ptr, ',')); ptr++) 486 for (ptr = optarg; (ptr = index (ptr, ',')); ptr++)
477 ptr[0] = ' '; /* relpace comma with space */ 487 ptr[0] = ' '; /* relpace comma with space */
478 for (ptr = optarg; (ptr = index (ptr, ' ')); ptr++) 488 for (ptr = optarg; (ptr = index (ptr, ' ')); ptr++)
@@ -944,7 +954,8 @@ print_usage (void)
944{ 954{
945 printf ("\ 955 printf ("\
946Usage: %s -H <ip_address> -o <OID> [-w warn_range] [-c crit_range] \n\ 956Usage: %s -H <ip_address> -o <OID> [-w warn_range] [-c crit_range] \n\
947 [-C community] [-s string] [-r regex] [-R regexi] [-t timeout]\n\ 957 [-C community] [-s string] [-r regex] [-R regexi]\n\
958 [-t timeout] [-e retries]\n\
948 [-l label] [-u units] [-p port-number] [-d delimiter]\n\ 959 [-l label] [-u units] [-p port-number] [-d delimiter]\n\
949 [-D output-delimiter] [-m miblist] [-P snmp version]\n\ 960 [-D output-delimiter] [-m miblist] [-P snmp version]\n\
950 [-L seclevel] [-U secname] [-a authproto] [-A authpasswd]\n\ 961 [-L seclevel] [-U secname] [-a authproto] [-A authpasswd]\n\