[Nagiosplug-checkins] CVS: nagiosplug/plugins check_snmp.c,1.7,1.8

Karl DeBisschop kdebisschop at users.sourceforge.net
Sun Oct 20 20:44:38 CEST 2002


Update of /cvsroot/nagiosplug/nagiosplug/plugins
In directory usw-pr-cvs1:/tmp/cvs-serv23927/plugins

Modified Files:
	check_snmp.c 
Log Message:
cleanup process_arguments, print_help, and print_usage

Index: check_snmp.c
===================================================================
RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/check_snmp.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -r1.7 -r1.8
*** check_snmp.c	20 Oct 2002 20:22:20 -0000	1.7
--- check_snmp.c	21 Oct 2002 03:43:25 -0000	1.8
***************
*** 1,18 ****
  /******************************************************************************
   *
-  * CHECK_SNMP.C
-  *
   * Program: SNMP plugin for Nagios
   * License: GPL
-  * Copyright (c) 1999 Ethan Galstad (nagios at nagios.org)
-  *
-  * Last Modified: $Date$
-  *
-  * Description:
-  *
-  * This plugin uses the 'snmpget' command included with the UCD-SNMP
-  * package.  If you don't have the package installed you will need to
-  * download it from http://ucd-snmp.ucdavis.edu before you can use
-  * this plugin.
   *
   * License Information:
--- 1,6 ----
***************
*** 31,43 ****
   * along with this program; if not, write to the Free Software
   * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   *./plugins/check_snmp 127.0.0.1 -c public -o .1.3.6.1.4.1.2021.9.1.2.1
   *****************************************************************************/
  
  #include "common.h"
  #include "utils.h"
  #include "popen.h"
  
- #define PROGNAME check_snmp
- 
  #define mark(a) ((a)!=0?"*":"")
  
--- 19,104 ----
   * along with this program; if not, write to the Free Software
   * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+  *
   *./plugins/check_snmp 127.0.0.1 -c public -o .1.3.6.1.4.1.2021.9.1.2.1
+  *
   *****************************************************************************/
  
+ #define PROGNAME "check_snmp"
+ #define REVISION "$Revision$"
+ #define COPYRIGHT "1999-2002"
+ #define AUTHOR "Ethan Galstad"
+ #define EMAIL "nagios at nagios.org"
+ #define SUMMARY "Check status of remote machines using SNMP.\n"
+ 
+ #define OPTIONS "\
+ -H <ip_address> -o <OID> [-w warn_range] [-c crit_range] \n\
+           [-C community] [-s string] [-r regex] [-R regexi] [-t timeout]\n\
+           [-l label] [-u units] [-p port-number] [-d delimiter]\n\
+           [-D output-delimiter]"
+ 
+ #define LONGOPTIONS "\
+  -H, --hostname=HOST\n\
+     Name or IP address of the device you wish to query\n\
+  -o, --oid=OID(s)\n\
+     Object identifier(s) whose value you wish to query\n\
+  -w, --warning=INTEGER_RANGE(s)\n\
+     Range(s) which will not result in a WARNING status\n\
+  -c, --critical=INTEGER_RANGE(s)\n\
+     Range(s) which will not result in a CRITICAL status\n\
+  -C, --community=STRING\n\
+     Optional community string for SNMP communication\n\
+     (default is \"%s\")\n\
+  -u, --units=STRING\n\
+     Units label(s) for output data (e.g., 'sec.').\n\
+  -p, --port=STRING\n\
+     UDP port number target is listening on. Default is \"%s\"\n\
+  -d, --delimiter=STRING\n\
+     Delimiter to use when parsing returned data. Default is \"%s\"\n\
+     Any data on the right hand side of the delimiter is considered\n\
+     to be the data that should be used in the evaluation.\n\
+  -t, --timeout=INTEGER\n\
+     Seconds to wait before plugin times out (see also nagios server timeout).\n\
+     Default is %d seconds\n\
+  -D, --output-delimiter=STRING\n\
+     Separates output on multiple OID requests\n\
+  -s, --string=STRING\n\
+     Return OK state (for that OID) if STRING is an exact match\n\
+  -r, --ereg=REGEX\n\
+     Return OK state (for that OID) if extended regular expression REGEX matches\n\
+  -R, --eregi=REGEX\n\
+     Return OK state (for that OID) if case-insensitive extended REGEX matches\n\
+  -l, --label=STRING\n\
+     Prefix label for output from plugin (default -s 'SNMP')\n"
+ 
+ #define NOTES "\
+ - This plugin uses the 'snmpget' command included with the UCD-SNMP package.\n\
+   If you don't have the package installed, you will need to download it from\n\
+   http://ucd-snmp.ucdavis.edu before you can use this plugin.\n\
+ - Multiple OIDs may be indicated by a comma- or space-delimited list (lists with\n\
+   internal spaces must be quoted)\n\
+ - Ranges are inclusive and are indicated with colons. When specified as\n\
+   'min:max' a STATE_OK will be returned if the result is within the indicated\n\
+   range or is equal to the upper or lower bound. A non-OK state will be\n\
+   returned if the result is outside the specified range.\n\
+ - If spcified in the order 'max:min' a non-OK state will be returned if the\n\
+   result is within the (inclusive) range.\n\
+ - Upper or lower bounds may be omitted to skip checking the respective limit.\n\
+ - Bare integers are interpreted as upper limits.\n\
+ - When checking multiple OIDs, separate ranges by commas like '-w 1:10,1:,:20'\n\
+ - Note that only one string and one regex may be checked at present\n\
+ - All evaluation methods other than PR, STR, and SUBSTR expect that the value\n\
+   returned from the SNMP query is an unsigned integer.\n"
+ 
+ #define DESCRIPTION "\
+ This plugin gets system information on a remote server via snmp.\n"
+ 
+ #define DEFAULT_COMMUNITY "public"
+ #define DEFAULT_PORT "161"
+ #define DEFAULT_TIMEOUT 10
+ 
  #include "common.h"
  #include "utils.h"
  #include "popen.h"
  
  #define mark(a) ((a)!=0?"*":"")
  
***************
*** 70,76 ****
  
  void print_usage (void);
! void print_help (char *);
  int process_arguments (int, char **);
! int call_getopt (int, char **);
  int check_num (int);
  char *clarify_message (char *);
--- 131,137 ----
  
  void print_usage (void);
! void print_help (void);
  int process_arguments (int, char **);
! int validate_arguments (void);
  int check_num (int);
  char *clarify_message (char *);
***************
*** 213,216 ****
--- 274,285 ----
  		p2 = show;
  
+ 		iresult = STATE_DEPENDENT;
+ 
+ 		if (eval_method[i] & CRIT_PRESENT) {
+ 			iresult = STATE_CRITICAL;
+ 		} else if (eval_method[i] & WARN_PRESENT) {
+ 			iresult = STATE_WARNING;
+ 		}
+ 
  		if (eval_method[i] & CRIT_GT ||
  				eval_method[i] & CRIT_LT ||
***************
*** 258,269 ****
  		}
  
! 		else {
! 			if (response)
! 				iresult = STATE_OK;
! 			else if (eval_method[i] & CRIT_PRESENT)
! 				iresult = STATE_CRITICAL;
! 			else
! 				iresult = STATE_WARNING;
! 		}
  
  		result = max_state (result, iresult);
--- 327,336 ----
  		}
  
! 		if (response && iresult == STATE_DEPENDENT)
! 			iresult = STATE_OK;
! 		else if (eval_method[i] & CRIT_PRESENT)
! 			iresult = STATE_CRITICAL;
! 		else
! 			iresult = STATE_WARNING;
  
  		result = max_state (result, iresult);
***************
*** 314,318 ****
  {
  	char *ptr;
! 	int c, i = 1;
  	int j = 0, jj = 0;
  
--- 381,385 ----
  {
  	char *ptr;
! 	int c = 1;
  	int j = 0, jj = 0;
  
***************
*** 356,363 ****
  #ifdef HAVE_GETOPT_H
  		c =
! 			getopt_long (argc, argv, "+?hVt:c:w:H:C:o:d:D:s:R:r:l:u:p:",
  									 long_options, &option_index);
  #else
! 		c = getopt (argc, argv, "+?hVt:c:w:H:C:o:d:D:s:R:r:l:u:p:");
  #endif
  
--- 423,430 ----
  #ifdef HAVE_GETOPT_H
  		c =
! 			getopt_long (argc, argv, "+?hVt:c:w:H:C:o:e:E:d:D:s:R:r:l:u:p:",
  									 long_options, &option_index);
  #else
! 		c = getopt (argc, argv, "+?hVt:c:w:H:C:o:e:E:d:D:s:R:r:l:u:p:");
  #endif
  
***************
*** 366,391 ****
  
  		switch (c) {
! 		case '?':									/* help */
! 			printf ("%s: Unknown argument: %s\n\n", my_basename (argv[0]), optarg);
! 			print_usage ();
! 			exit (STATE_UNKNOWN);
! 		case 'h':									/* help */
! 			print_help (my_basename (argv[0]));
  			exit (STATE_OK);
! 		case 'V':									/* version */
! 			print_revision (my_basename (argv[0]), "$Revision$");
  			exit (STATE_OK);
  		case 'v': /* verbose */
  			verbose = TRUE;
  			break;
! 		case 't':									/* timeout period */
! 			if (!is_integer (optarg)) {
! 				printf ("%s: Timeout Interval must be an integer!\n\n",
! 								my_basename (argv[0]));
! 				print_usage ();
! 				exit (STATE_UNKNOWN);
! 			}
  			timeout_interval = atoi (optarg);
  			break;
  		case 'c':									/* critical time threshold */
  			if (strspn (optarg, "0123456789:,") < strlen (optarg)) {
--- 433,468 ----
  
  		switch (c) {
! 		case '?':	/* usage */
! 			usage2 ("Unknown argument", optarg);
! 		case 'h':	/* help */
! 			print_help ();
  			exit (STATE_OK);
! 		case 'V':	/* version */
! 			print_revision (PROGNAME, REVISION);
  			exit (STATE_OK);
  		case 'v': /* verbose */
  			verbose = TRUE;
  			break;
! 		case 't':	/* timeout period */
! 			if (!is_integer (optarg))
! 				usage2 ("Timeout Interval must be an integer", optarg);
  			timeout_interval = atoi (optarg);
  			break;
+ 		case 'e': /* PRELIMINARY - may change */
+ 			eval_method[j] |= WARN_PRESENT;
+ 			for (ptr = optarg; (ptr = index (ptr, ',')); ptr++)
+ 				ptr[0] = ' '; /* relpace comma with space */
+ 			for (ptr = optarg; (ptr = index (ptr, ' ')); ptr++)
+ 				eval_method[++j] |= WARN_PRESENT;
+ 			asprintf (&oid, "%s %s", oid, optarg);
+ 			break;
+ 		case 'E': /* PRELIMINARY - may change */
+ 			eval_method[j] |= WARN_PRESENT;
+ 			for (ptr = optarg; (ptr = index (ptr, ',')); ptr++)
+ 				ptr[0] = ' '; /* relpace comma with space */
+ 			for (ptr = optarg; (ptr = index (ptr, ' ')); ptr++)
+ 				eval_method[++j] |= CRIT_PRESENT;
+ 			asprintf (&oid, "%s %s", oid, optarg);
+ 			break;
  		case 'c':									/* critical time threshold */
  			if (strspn (optarg, "0123456789:,") < strlen (optarg)) {
***************
*** 425,430 ****
  			for (ptr = optarg; (ptr = index (ptr, ',')); ptr++)
  				ptr[0] = ' '; /* relpace comma with space */
! 			for (ptr = optarg, j = 1; (ptr = index (ptr, ' ')); ptr++)
  				j++; /* count OIDs */
  			asprintf (&oid, "%s %s", oid, optarg);
  			break;
--- 502,508 ----
  			for (ptr = optarg; (ptr = index (ptr, ',')); ptr++)
  				ptr[0] = ' '; /* relpace comma with space */
! 			for (ptr = optarg; (ptr = index (ptr, ' ')); ptr++) {
  				j++; /* count OIDs */
+ 			}
  			asprintf (&oid, "%s %s", oid, optarg);
  			break;
***************
*** 530,630 ****
  	}
  
- 	c = optind;
  	if (server_address == NULL)
! 		server_address = strscpy (NULL, argv[c++]);
  
  	if (community == NULL)
! 		community = strscpy (NULL, "public");
  
  	if (delimiter == NULL)
! 		delimiter = strscpy (NULL, DEFAULT_DELIMITER);
  
  	if (output_delim == NULL)
! 		output_delim = strscpy (NULL, DEFAULT_OUTPUT_DELIMITER);
  
  	if (label == NULL)
! 		label = strscpy (NULL, "SNMP");
  
  	if (units == NULL)
! 		units = strscpy (NULL, "");
  
  	if (port == NULL)
! 		port = strscpy(NULL,"161");
  
! 	return i;
  }
  
  void
! print_usage (void)
  {
  	printf
! 		("Usage: check_snmp -H <ip_address> -o <OID> [-w warn_range] [-c crit_range] \n"
! 		 "                  [-C community] [-s string] [-r regex] [-R regexi] [-t timeout]\n"
! 		 "                  [-l label] [-u units] [-p port-number] [-d delimiter] [-D output-delimiter]\n"
! 		 "       check_snmp --help\n" "       check_snmp --version\n");
  }
  
  void
! print_help (char *cmd)
  {
- 	printf ("Copyright (c) 1999 Ethan Galstad (nagios at nagios.org)\n"
- 					"License: GPL\n\n");
- 	print_usage ();
  	printf
! 		("\nOptions:\n"
! 		 " -h, --help\n"
! 		 "    Print detailed help screen\n"
! 		 " -V, --version\n"
! 		 "    Print version information\n"
! 		 " -H, --hostname=HOST\n"
! 		 "    Name or IP address of the device you wish to query\n"
! 		 " -o, --oid=OID(s)\n"
! 		 "    Object identifier(s) whose value you wish to query\n"
! 		 " -w, --warning=INTEGER_RANGE(s)\n"
! 		 "    Range(s) which will not result in a WARNING status\n"
! 		 " -c, --critical=INTEGER_RANGE(s)\n"
! 		 "    Range(s) which will not result in a CRITICAL status\n"
! 		 " -C, --community=STRING\n"
! 		 "    Optional community string for SNMP communication\n"
! 		 "    (default is \"public\")\n"
! 		 " -u, --units=STRING\n"
! 		 "    Units label(s) for output data (e.g., 'sec.').\n"
! 		 " -p, --port=STRING\n"
!          "    UDP port number target is listening on.\n"
! 		 " -d, --delimiter=STRING\n"
! 		 "    Delimiter to use when parsing returned data. Default is \"%s\"\n"
! 		 "    Any data on the right hand side of the delimiter is considered\n"
! 		 "    to be the data that should be used in the evaluation.\n"
! 		 " -t, --timeout=INTEGER\n"
! 		 "    Seconds to wait before plugin times out (see also nagios server timeout)\n"
! 		 " -D, --output-delimiter=STRING\n"
! 		 "    Separates output on multiple OID requests\n"
! 		 " -s, --string=STRING\n"
! 		 "    Return OK state (for that OID) if STRING is an exact match\n"
! 		 " -r, --ereg=REGEX\n"
! 		 "    Return OK state (for that OID) if extended regular expression REGEX matches\n"
! 		 " -R, --eregi=REGEX\n"
! 		 "    Return OK state (for that OID) if case-insensitive extended REGEX matches\n"
! 		 " -l, --label=STRING\n"
! 		 "    Prefix label for output from plugin (default -s 'SNMP')\n\n"
! 		 "- This plugin uses the 'snmpget' command included with the UCD-SNMP package.\n"
! 		 "  If you don't have the package installed, you will need to download it from\n"
! 		 "  http://ucd-snmp.ucdavis.edu before you can use this plugin.\n"
! 		 "- Multiple OIDs may be indicated by a comma- or space-delimited list (lists with\n"
! 		 "  internal spaces must be quoted)\n"
! 		 "- Ranges are inclusive and are indicated with colons. When specified as\n"
! 		 "  'min:max' a STATE_OK will be returned if the result is within the indicated\n"
! 		 "  range or is equal to the upper or lower bound. A non-OK state will be\n"
! 		 "  returned if the result is outside the specified range.\n"
! 		 "- If spcified in the order 'max:min' a non-OK state will be returned if the\n"
! 		 "  result is within the (inclusive) range.\n"
! 		 "- Upper or lower bounds may be omitted to skip checking the respective limit.\n"
! 		 "- Bare integers are interpreted as upper limits.\n"
! 		 "- When checking multiple OIDs, separate ranges by commas like '-w 1:10,1:,:20'\n"
! 		 "- Note that only one string and one regex may be checked at present\n"
! 		 "- All evaluation methods other than PR, STR, and SUBSTR expect that the value\n"
! 		 "  returned from the SNMP query is an unsigned integer.\n\n",
! 		 DEFAULT_DELIMITER);
  }
  
  char *
--- 608,689 ----
  	}
  
  	if (server_address == NULL)
! 		asprintf (&server_address, argv[optind]);
! 
! 	return validate_arguments ();
! }
! 
! /******************************************************************************
! 
! @@-
! <sect3>
! <title>validate_arguments</title>
! 
! <para>&PROTO_validate_arguments;</para>
! 
! <para>Given a database name, this function returns TRUE if the string
! is a valid PostgreSQL database name, and returns false if it is
! not.</para>
! 
! <para>Valid PostgreSQL database names are less than &NAMEDATALEN;
! characters long and consist of letters, numbers, and underscores. The
! first character cannot be a number, however.</para>
! 
! </sect3>
! -@@
! ******************************************************************************/
! 
! int
! validate_arguments ()
! {
  
  	if (community == NULL)
! 		asprintf (&community, DEFAULT_COMMUNITY);
  
  	if (delimiter == NULL)
! 		asprintf (&delimiter, DEFAULT_DELIMITER);
  
  	if (output_delim == NULL)
! 		asprintf (&output_delim, DEFAULT_OUTPUT_DELIMITER);
  
  	if (label == NULL)
! 		asprintf (&label, "SNMP");
  
  	if (units == NULL)
! 		asprintf (&units, "");
  
  	if (port == NULL)
! 		asprintf (&port, DEFAULT_PORT);
  
! 	return OK;
  }
+ 
+ 
  
  void
! print_help (void)
  {
+ 	print_revision (PROGNAME, REVISION);
+ 	printf
+ 		("Copyright (c) %s %s <%s>\n\n%s\n",
+ 		 COPYRIGHT, AUTHOR, EMAIL, SUMMARY);
+ 	print_usage ();
  	printf
! 		("\nOptions:\n" LONGOPTIONS "\n" DESCRIPTION "\n" NOTES "\n", 
! 		 DEFAULT_COMMUNITY, DEFAULT_PORT, DEFAULT_DELIMITER, DEFAULT_TIMEOUT);
! 	support ();
  }
  
  void
! print_usage (void)
  {
  	printf
! 		("Usage:\n" " %s %s\n"
! 		 " %s (-h | --help) for detailed help\n"
! 		 " %s (-V | --version) for version information\n",
! 		 PROGNAME, OPTIONS, PROGNAME, PROGNAME);
  }
+ 
+ 
  
  char *





More information about the Commits mailing list