--- plugins/check_snmp.c.orig	Thu Feb 28 07:42:59 2002
+++ plugins/check_snmp.c	Tue Jul  9 11:48:10 2002
@@ -97,6 +97,12 @@
 char oid[MAX_INPUT_BUFFER] = "";
 char *label = NULL;
 char *units = NULL;
+char *secname = NULL;
+char *seclevel = NULL;
+char *authproto = NULL;
+char *authpasswd = NULL;
+char *privpasswd = NULL;
+int  proto = 1;
 char string_value[MAX_INPUT_BUFFER] = "";
 char **labels = NULL;
 char **unitv = NULL;
@@ -143,10 +149,35 @@
 		usage ("Incorrect arguments supplied\n");
 
 	/* create the command line to execute */
-	command_line = ssprintf
+	if (proto == 3) {
+	    if ( strcmp(seclevel, "noAuthNoPriv") == 0 ) {
+	    	command_line = ssprintf
+	                      (command_line,
+	                       "%s -m ALL -v 3 -l noAuthNoPriv  %s %s",
+                               PATH_TO_SNMPGET, server_address, oid);
+	    }
+	    if ( strcmp(seclevel, "authNoPriv") == 0 ) {
+		command_line = ssprintf
+		              (command_line,
+			       "%s -m ALL -v 3 -l authNoPriv -a %s -u %s -A %s %s %s",
+			       PATH_TO_SNMPGET, authproto, secname, authpasswd, 
+			       server_address, oid);
+	    }
+	    if ( strcmp(seclevel, "authPriv") == 0 ) {
+		command_line = ssprintf
+		              (command_line,
+			       "%s -m ALL -v 3 -l authPriv -a %s -u %s -A %s -X %s %s %s",
+			       PATH_TO_SNMPGET, authproto, secname, authpasswd, 
+			       privpasswd, server_address, oid);
+	    }
+	} else {
+	    command_line = ssprintf
 		(command_line,
 		 "%s -m ALL -v 1 %s %s %s",
 		 PATH_TO_SNMPGET, server_address, community, oid);
+	}
+
+	
 
 	/* run the command */
 	child_process = spopen (command_line);
@@ -285,7 +316,7 @@
 	if (found == 0)
 		terminate
 			(STATE_UNKNOWN,
-			 "%s problem - No data recieved from host\nCMD: %s\n",
+			 "%s problem - No data received from host\nCMD: %s\n",
 			 label, command_line);
 
 	/* WARNING if output found on stderr */
@@ -348,6 +379,13 @@
 	if (units == NULL)
 		units = strscpy (NULL, "");
 
+	if (seclevel == NULL || ( strcmp(seclevel, "authNoPriv") && 
+	                          strcmp(seclevel, "authPriv") ) ) 
+	    	seclevel = strscpy (NULL, "noAuthNoPriv");
+
+	if (authproto == NULL)
+	    	authproto = strscpy (NULL, "MD5");
+	
 	return c;
 }
 
@@ -378,6 +416,12 @@
 		{"eregi", required_argument, 0, 'R'},
 		{"label", required_argument, 0, 'l'},
 		{"units", required_argument, 0, 'u'},
+		{"protocol", required_argument,0, 'p'},
+		{"seclevel", required_argument,0, 'L'},
+		{"authproto", required_argument,0, 'a'},
+		{"authpasswd",  required_argument,0, 'A'},
+		{"privpasswd", required_argument,0, 'X'},
+		{"secname", required_argument, 0, 'U'},
 		{0, 0, 0, 0}
 	};
 #endif
@@ -385,10 +429,10 @@
 	while (1) {
 #ifdef HAVE_GETOPT_H
 		c =
-			getopt_long (argc, argv, "+?hVt:c:w:H:C:o:d:D:s:R:r:l:u:",
+			getopt_long (argc, argv, "+?hVt:c:w:H:C:o:d:D:s:R:r:l:u:p:L:a:A:X:U:",
 									 long_options, &option_index);
 #else
-		c = getopt (argc, argv, "+?hVt:c:w:H:C:o:d:D:s:R:r:l:u:");
+		c = getopt (argc, argv, "+?hVt:c:w:H:C:o:d:D:s:R:r:l:u:p:L:a:A:X:U:");
 #endif
 
 		if (c == -1 || c == EOF)
@@ -409,6 +453,12 @@
 		case 'r':
 		case 'l':
 		case 'u':
+		case 'p':
+		case 'L':
+		case 'a':
+		case 'A':
+		case 'X':
+		case 'U':
 			i++;
 		}
 
@@ -568,6 +618,24 @@
 					unitv[nunits - 1] = ptr;
 			}
 			break;
+		case 'p':
+			proto = atoi(optarg);
+			break;
+		case 'L':
+			seclevel = strscpy (seclevel, optarg);
+			break;
+		case 'a':
+			authproto = strscpy (authproto, optarg);
+			break;	
+	   	case 'A':
+			authpasswd = strscpy (authpasswd, optarg);
+			break;
+		case 'X':
+			privpasswd = strscpy (privpasswd, optarg);
+			break;
+		case 'U':
+			secname = strscpy (secname, optarg);
+			break;
 		}
 	}
 	return i;
@@ -580,6 +648,8 @@
 		("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] [-d delimiter] [-D output-delimiter]\n"
+		 "                  [-p protocol] [-L seclevel] [-a authproto] [-A authpasswd]\n"
+		 "                  [-X privpasswd] [-U secname]\n"
 		 "       check_snmp --help\n" "       check_snmp --version\n");
 }
 
@@ -597,6 +667,18 @@
 		 "    Print version information\n"
 		 " -H, --hostname=HOST\n"
 		 "    Name or IP address of the device you wish to query\n"
+		 " -p, --protocol=[1|3]\n"
+		 "    SNMP protocol version\n"
+		 " -L, --seclevel=[noAuthNoPriv|authNoPriv|authPriv]\n"
+		 "    SNMPv3 securityLevel\n"
+		 " -U, --secname=USERNAME\n"
+		 "    SNMPv3 username\n"
+		 " -a, --authproto=[MD5|SHA]\n"
+		 "    SNMPv3 authproto\n"
+		 " -A, --authpasswd=PASSWORD\n"
+		 "    SNMPv3 authentication password\n"
+		 " -X, --privpasswd=PASSWORD\n"
+		 "    SNMPv3 crypt password (DES)\n"
 		 " -o, --oid=OID(s)\n"
 		 "    Object identifier(s) whose value you wish to query\n"
 		 " -w, --warning=INTEGER_RANGE(s)\n"