diff --git a/plugins/check_nt.c b/plugins/check_nt.c
index 25645eaa91ab8564858d9d4ce629314afee5e77e..45a2bb0fda8ccd4708c345dc900e3b9d94441eb5 100644 (file)
--- a/plugins/check_nt.c
+++ b/plugins/check_nt.c
/******************************************************************************
- *
- * CHECK_NT.C
- *
- * Program: Windows NT plugin for Nagios
- * License: GPL
- * Copyright (c) 2000-2002 Yves Rubin (rubiyz@yahoo.com)
- *
- * Description:
- *
- * This requires NSClient software to run on NT (http://nsclient.ready2run.nl/)
- *
- * License Information:
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *****************************************************************************/
+*
+* Nagios check_nt plugin
+*
+* License: GPL
+* Copyright (c) 2000-2002 Yves Rubin (rubiyz@yahoo.com)
+* Copyright (c) 2003-2006 nagios-plugins team
+*
+* Last Modified: $Date$
+*
+* Description:
+*
+* This file contains the check_nt plugin
+*
+* This plugin collects data from the NSClient service running on a
+* Windows NT/2000/XP/2003 server.
+* This requires NSClient software to run on NT (http://nsclient.ready2run.nl/)
+*
+* License Information:
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*
+* $Id$
+*
+*****************************************************************************/
+
+const char *progname = "check_nt";
+const char *revision = "$Revision$";
+const char *copyright = "2003-2006";
+const char *email = "nagiosplug-devel@lists.sourceforge.net";
#include "common.h"
#include "netutils.h"
enum checkvars vars_to_check = CHECK_NONE;
int show_all=FALSE;
-const char *progname = "check_nt";
-
char recv_buffer[MAX_INPUT_BUFFER];
void fetch_data (const char* address, int port, const char* sendb);
void print_usage(void);
int main(int argc, char **argv){
+
+/* should be int result = STATE_UNKNOWN; */
+
int return_code = STATE_UNKNOWN;
char *send_buffer=NULL;
char *output_message=NULL;
unsigned long utilization;
unsigned long uptime;
unsigned long age_in_minutes;
- double counter_value;
+ double counter_value = 0.0;
int offset=0;
int updays=0;
int uphours=0;
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
- if(process_arguments(argc,argv)==ERROR)
- usage(_("Could not parse arguments\n"));
+ if(process_arguments(argc,argv) == ERROR)
+ usage4 (_("Could not parse arguments"));
/* initialize alarm signal handling */
signal(SIGALRM,socket_timeout_alarm_handler);
/* -l parameters is present with only integers */
return_code=STATE_OK;
temp_string = strdup (_("CPU Load"));
- temp_string_perf = strdup (_(" "));
+ temp_string_perf = strdup (" ");
/* loop until one of the parameters is wrong or not present */
while (lvalue_list[0+offset]> (unsigned long)0 &&
updays = uptime / 86400;
uphours = (uptime % 86400) / 3600;
upminutes = ((uptime % 86400) % 3600) / 60;
- asprintf(&output_message,_("System Uptime : %u day(s) %u hour(s) %u minute(s)"),updays,uphours, upminutes);
+ asprintf(&output_message,_("System Uptime - %u day(s) %u hour(s) %u minute(s)"),updays,uphours, upminutes);
return_code=STATE_OK;
break;
else {
preparelist(value_list); /* replace , between services with & to send the request */
asprintf(&send_buffer,"%s&%u&%s&%s", req_password,(vars_to_check==CHECK_SERVICESTATE)?5:6,
- (show_all==TRUE)?_("ShowAll"):_("ShowFail"),value_list);
+ (show_all==TRUE) ? "ShowAll" : "ShowFail",value_list);
fetch_data (server_address, server_port, send_buffer);
return_code=atoi(strtok(recv_buffer,"&"));
temp_string=strtok(NULL,"&");
asprintf (&output_message, "%.f", counter_value);
else if (isPercent)
{
- counter_unit = strdup (_("%"));
+ counter_unit = strdup ("%");
allRight = TRUE;
}
if (allRight)
{
/* Let's format the output string, finally... */
-
- asprintf (&output_message, "%s = %.2f %s", description, counter_value, counter_unit);
- output_message = strcat (output_message, "|");
- output_message = strcat (output_message,
- fperfdata (description, counter_value, counter_unit,
- 1, warning_value, 1, critical_value,
- (!(isPercent) && (minval != NULL)), fminval,
- (!(isPercent) && (minval != NULL)), fmaxval));
+ if (strstr(description, "%") == NULL) {
+ asprintf (&output_message, "%s = %.2f %s", description, counter_value, counter_unit);
+ } else {
+ /* has formatting, will segv if wrong */
+ asprintf (&output_message, description, counter_value);
+ }
+ asprintf (&output_message, "%s |", output_message);
+ asprintf (&output_message,"%s %s", output_message,
+ fperfdata (description, counter_value,
+ counter_unit, 1, warning_value, 1, critical_value,
+ (!(isPercent) && (minval != NULL)), fminval,
+ (!(isPercent) && (minval != NULL)), fmaxval));
}
}
case CHECK_NONE:
default:
- usage (_("Please specify a variable to check"));
+ usage4 (_("Please specify a variable to check"));
break;
}
-
-
-\f
/* process command-line arguments */
int process_arguments(int argc, char **argv){
int c;
switch (c)
{
case '?': /* print short usage statement if args not parsable */
- printf("%s: Unknown argument: %s\n\n",progname,optarg);
- print_usage();
- exit(STATE_UNKNOWN);
+ usage2 (_("Unknown argument"), optarg);
case 'h': /* help */
print_help();
exit(STATE_OK);
case 'V': /* version */
- print_revision(progname,"$Revision$");
+ print_revision(progname,revision);
exit(STATE_OK);
case 'H': /* hostname */
if (server_address) free(server_address);
if (is_intnonneg(optarg))
server_port=atoi(optarg);
else
- die(STATE_UNKNOWN,_("Server port an integer (seconds)\nType '%s -h' for additional help\n"),progname);
+ die(STATE_UNKNOWN,_("Server port must be an integer\n"));
break;
case 'v':
if(strlen(optarg)<4)
-
-
-\f
void fetch_data (const char *address, int port, const char *sendb) {
int result;
result=process_tcp_request(address, port, sendb, recv_buffer,sizeof(recv_buffer));
if(result!=STATE_OK)
- die (result, "could not fetch information from server\n");
+ die (result, _("could not fetch information from server\n"));
if (!strncmp(recv_buffer,"ERROR",5))
die (STATE_UNKNOWN, "NSClient - %s\n",recv_buffer);
-
-
-\f
void print_help(void)
{
- print_revision(progname,"$Revision$");
- printf (_("\
-Copyright (c) 2000 Yves Rubin (rubiyz@yahoo.com)\n\n\
-This plugin collects data from the NSClient service running on a\n\
-Windows NT/2000/XP server.\n\n"));
+ print_revision(progname,revision);
+
+ printf ("Copyright (c) 2000 Yves Rubin (rubiyz@yahoo.com)\n");
+ printf (COPYRIGHT, copyright, email);
+
+ printf ("%s\n", _("This plugin collects data from the NSClient service running on a"));
+ printf ("%s\n", _("Windows NT/2000/XP/2003 server."));
+
+ printf ("\n\n");
+
print_usage();
- printf (_("\nOptions:\n\
--H, --hostname=HOST\n\
- Name of the host to check\n\
--p, --port=INTEGER\n\
- Optional port number (default: %d)\n\
--s <password>\n\
- Password needed for the request\n\
--w, --warning=INTEGER\n\
- Threshold which will result in a warning status\n\
--c, --critical=INTEGER\n\
- Threshold which will result in a critical status\n\
--t, --timeout=INTEGER\n\
- Seconds before connection attempt times out (default: %d)\n\
--h, --help\n\
- Print this help screen\n\
--V, --version\n\
- Print version information\n"),
- PORT, DEFAULT_SOCKET_TIMEOUT);
- printf (_("\
--v, --variable=STRING\n\
- Variable to check. Valid variables are:\n"));
+
+ printf (_(UT_HELP_VRSN));
+
+ printf ("%s\n", _("Options:"));
+ printf (" %s\n", "-H, --hostname=HOST");
+ printf (" %s\n", _("Name of the host to check"));
+ printf (" %s\n", "-p, --port=INTEGER");
+ printf (" %s", _("Optional port number (default: "));
+ printf ("%d)\n", PORT);
+ printf (" %s\n", "-s <password>");
+ printf (" %s\n", _("Password needed for the request"));
+ printf (" %s\n", "-w, --warning=INTEGER");
+ printf (" %s\n", _("Threshold which will result in a warning status"));
+ printf (" %s\n", "-c, --critical=INTEGER");
+ printf (" %s\n", _("Threshold which will result in a critical status"));
+ printf (" %s\n", "-t, --timeout=INTEGER");
+ printf (" %s", _("Seconds before connection attempt times out (default: "));
+ printf ("%d)\n", DEFAULT_SOCKET_TIMEOUT);
+ printf (" %s\n", "-h, --help");
+ printf (" %s\n", _("Print this help screen"));
+ printf (" %s\n", "-V, --version");
+ printf (" %s\n", _("Print version information"));
+ printf (" %s\n", "-v, --variable=STRING");
+ printf (" %s\n", _("Variable to check. Valid variables are:"));
printf (_("\
CLIENTVERSION = Get the NSClient version\n\
If -l <version> is specified, will return warning if versions differ.\n"));
Request a -l parameters with the following syntax:\n\
-l \"\\\\<performance object>\\\\counter\",\"<description>\n\
The <description> parameter is optional and \n\
- is given to a printf output command which require a float parameters.\n\
+ is given to a printf output command which requires a float parameter.\n\
+ If <description> does not include \"%%\", it is used as a label.\n\
Some examples:\n\
\"Paging file usage is %%.2f %%%%\"\n\
\"%%.f %%%% paging file used.\"\n"));
printf (_("Notes:\n\
- The NSClient service should be running on the server to get any information\n\
(http://nsclient.ready2run.nl).\n\
- - Critical thresholds should be lower than warning thresholds\n"));
+ - Critical thresholds should be lower than warning thresholds\n\
+ - Default port 1248 is sometimes in use by other services. The error \n\
+ output when this happens contains \"Cannot map xxxxx to protocol number\". \n\
+ One fix for this is to change the port to something else on check_nt \n\
+ and on the client service it\'s connecting to. \n"));
}
-
void print_usage(void)
{
- printf(_("\
-Usage: %s -H host -v variable [-p port] [-w warning] [-c critical]\n\
- [-l params] [-d SHOWALL] [-t timeout]\n"), progname);
- printf (_(UT_HLP_VRS), progname, progname);
+ printf (_("Usage:"));
+ printf ("%s -H host -v variable [-p port] [-w warning] [-c critical]",progname);
+ printf ("[-l params] [-d SHOWALL] [-t timeout]\n");
}