aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/check_dig.c4
-rw-r--r--plugins/check_http.c1
-rw-r--r--plugins/check_load.c6
-rw-r--r--plugins/check_mrtg.c165
-rw-r--r--plugins/check_mrtgtraf.c119
-rw-r--r--plugins/check_nwstat.c33
-rw-r--r--plugins/check_overcr.c26
-rw-r--r--plugins/check_ping.c32
-rw-r--r--plugins/check_procs.c109
-rw-r--r--plugins/check_real.c31
-rw-r--r--plugins/utils.c6
-rw-r--r--plugins/utils.h6
12 files changed, 301 insertions, 237 deletions
diff --git a/plugins/check_dig.c b/plugins/check_dig.c
index 7c39a243..ff160591 100644
--- a/plugins/check_dig.c
+++ b/plugins/check_dig.c
@@ -97,7 +97,7 @@ main (int argc, char **argv)
input_buffer[strcspn (input_buffer, "\r\n")] = '\0';
if (strstr (input_buffer, query_address) == input_buffer) {
- asprintf (&output, input_buffer);
+ output = strdup(input_buffer);
result = STATE_OK;
}
else {
@@ -119,7 +119,7 @@ main (int argc, char **argv)
result = max_state (result, STATE_WARNING);
printf ("%s", input_buffer);
if (strlen (output) == 0)
- asprintf (&output, 1 + index (input_buffer, ':'));
+ output = strdup (1 + index (input_buffer, ':'));
}
(void) fclose (child_stderr);
diff --git a/plugins/check_http.c b/plugins/check_http.c
index e2047edd..3321d5ac 100644
--- a/plugins/check_http.c
+++ b/plugins/check_http.c
@@ -992,6 +992,7 @@ print_help (void)
{
print_revision (progname, revision);
+ printf (_("Copyright (c) 1999 Ethan Galstad <nagios@nagios.org>\n"));
printf (_(COPYRIGHT), copyright, email);
printf (_("\
diff --git a/plugins/check_load.c b/plugins/check_load.c
index 4a38e6ce..bdb1e55d 100644
--- a/plugins/check_load.c
+++ b/plugins/check_load.c
@@ -45,7 +45,7 @@ void print_usage (void);
float wload1 = -1, wload5 = -1, wload15 = -1;
float cload1 = -1, cload5 = -1, cload15 = -1;
-char *status_line = "";
+char *status_line;
@@ -72,7 +72,7 @@ main (int argc, char **argv)
float la1, la5, la15;
if (process_arguments (argc, argv) == ERROR)
- usage ("\n");
+ usage ("failed processing arguments\n");
#if HAVE_GETLOADAVG==1
result = getloadavg (la, 3);
@@ -122,7 +122,7 @@ main (int argc, char **argv)
# endif
#endif
- if ((la1 == -1) || (la5 == -1) || (la15 == -1)) {
+ if ((la1 < 0.0) || (la5 < 0.0) || (la15 < 0.0)) {
#if HAVE_GETLOADAVG==1
printf (_("Error in getloadavg()\n"));
#else
diff --git a/plugins/check_mrtg.c b/plugins/check_mrtg.c
index 2a9958d0..21efac2e 100644
--- a/plugins/check_mrtg.c
+++ b/plugins/check_mrtg.c
@@ -24,80 +24,10 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net";
#include "common.h"
#include "utils.h"
-/* original command line:
- <log_file> <expire_minutes> <AVG|MAX> <variable> <vwl> <vcl> <label> [units] */
-
-void
-print_usage (void)
-{
- printf (_("\
-Usage: %s -F log_file -a <AVG | MAX> -v variable -w warning -c critical\n\
- [-l label] [-u units] [-e expire_minutes] [-t timeout] [-v]\n"), progname);
- printf (_(UT_HLP_VRS), progname, progname);
-}
-
-void
-print_help (void)
-{
- print_revision (progname, revision);
-
- printf (_(COPYRIGHT), copyright, email);
-
- printf(_("\
-This plugin will check either the average or maximum value of one of the\n\
-two variables recorded in an MRTG log file.\n"));
-
- print_usage ();
-
- printf (_(UT_HELP_VRSN));
-
- printf (_("\
- -F, --logfile=FILE\n\
- The MRTG log file containing the data you want to monitor\n\
- -e, --expires=MINUTES\n\
- Minutes before MRTG data is considered to be too old\n\
- -a, --aggregation=AVG|MAX\n\
- Should we check average or maximum values?\n\
- -v, --variable=INTEGER\n\
- Which variable set should we inspect? (1 or 2)\n\
- -w, --warning=INTEGER\n\
- Threshold value for data to result in WARNING status\n\
- -c, --critical=INTEGER\n\
- Threshold value for data to result in CRITICAL status\n"));
-
- printf (_("\
- -l, --label=STRING\n\
- Type label for data (Examples: Conns, \"Processor Load\", In, Out)\n\
- -u, --units=STRING\n\
- Option units label for data (Example: Packets/Sec, Errors/Sec, \n\
- \"Bytes Per Second\", \"%% Utilization\")\n"));
-
- printf (_("\
-If the value exceeds the <vwl> threshold, a WARNING status is returned. If\n\
-the value exceeds the <vcl> threshold, a CRITICAL status is returned. If\n\
-the data in the log file is older than <expire_minutes> old, a WARNING\n\
-status is returned and a warning message is printed.\n\n"));
-
- printf(_("This plugin is useful for monitoring MRTG data that does not correspond to\n\
-bandwidth usage. (Use the check_mrtgtraf plugin for monitoring bandwidth).\n\
-It can be used to monitor any kind of data that MRTG is monitoring - errors,\n\
-packets/sec, etc. I use MRTG in conjuction with the Novell NLM that allows\n\
-me to track processor utilization, user connections, drive space, etc and\n\
-this plugin works well for monitoring that kind of data as well.\n\n"));
-
- printf (_("Notes:\n\
-- This plugin only monitors one of the two variables stored in the MRTG log\n\
- file. If you want to monitor both values you will have to define two\n\
- commands with different values for the <variable> argument. Of course,\n\
- you can always hack the code to make this plugin work for you...\n\
-- MRTG stands for the Multi Router Traffic Grapher. It can be downloaded from\n\
- http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/mrtg.html\n"));
-
- printf (_(UT_SUPPORT));
-}
-
int process_arguments (int, char **);
int validate_arguments (void);
+void print_help (void);
+void print_usage (void);
char *log_file = NULL;
int expire_minutes = 0;
@@ -105,8 +35,8 @@ int use_average = TRUE;
int variable_number = -1;
unsigned long value_warning_threshold = 0L;
unsigned long value_critical_threshold = 0L;
-char *value_label = "";
-char *units_label = "";
+char *value_label;
+char *units_label;
int
main (int argc, char **argv)
@@ -351,5 +281,92 @@ validate_arguments (void)
if (variable_number == -1)
usage (_("You must supply the variable number\n"));
+ if (value_label == NULL)
+ value_label = strdup ("");
+
+ if (units_label == NULL)
+ units_label = strdup ("");
+
return OK;
}
+
+
+
+
+
+
+void
+print_help (void)
+{
+ print_revision (progname, revision);
+
+ printf (_("Copyright (c) 1999 Ethan Galstad <nagios@nagios.org>\n"));
+ printf (_(COPYRIGHT), copyright, email);
+
+ printf(_("\
+This plugin will check either the average or maximum value of one of the\n\
+two variables recorded in an MRTG log file.\n"));
+
+ print_usage ();
+
+ printf (_(UT_HELP_VRSN));
+
+ printf (_("\
+ -F, --logfile=FILE\n\
+ The MRTG log file containing the data you want to monitor\n\
+ -e, --expires=MINUTES\n\
+ Minutes before MRTG data is considered to be too old\n\
+ -a, --aggregation=AVG|MAX\n\
+ Should we check average or maximum values?\n\
+ -v, --variable=INTEGER\n\
+ Which variable set should we inspect? (1 or 2)\n\
+ -w, --warning=INTEGER\n\
+ Threshold value for data to result in WARNING status\n\
+ -c, --critical=INTEGER\n\
+ Threshold value for data to result in CRITICAL status\n"));
+
+ printf (_("\
+ -l, --label=STRING\n\
+ Type label for data (Examples: Conns, \"Processor Load\", In, Out)\n\
+ -u, --units=STRING\n\
+ Option units label for data (Example: Packets/Sec, Errors/Sec, \n\
+ \"Bytes Per Second\", \"%% Utilization\")\n"));
+
+ printf (_("\
+If the value exceeds the <vwl> threshold, a WARNING status is returned. If\n\
+the value exceeds the <vcl> threshold, a CRITICAL status is returned. If\n\
+the data in the log file is older than <expire_minutes> old, a WARNING\n\
+status is returned and a warning message is printed.\n\n"));
+
+ printf(_("This plugin is useful for monitoring MRTG data that does not correspond to\n\
+bandwidth usage. (Use the check_mrtgtraf plugin for monitoring bandwidth).\n\
+It can be used to monitor any kind of data that MRTG is monitoring - errors,\n\
+packets/sec, etc. I use MRTG in conjuction with the Novell NLM that allows\n\
+me to track processor utilization, user connections, drive space, etc and\n\
+this plugin works well for monitoring that kind of data as well.\n\n"));
+
+ printf (_("Notes:\n\
+- This plugin only monitors one of the two variables stored in the MRTG log\n\
+ file. If you want to monitor both values you will have to define two\n\
+ commands with different values for the <variable> argument. Of course,\n\
+ you can always hack the code to make this plugin work for you...\n\
+- MRTG stands for the Multi Router Traffic Grapher. It can be downloaded from\n\
+ http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/mrtg.html\n"));
+
+ printf (_(UT_SUPPORT));
+}
+
+
+
+
+/* original command line:
+ <log_file> <expire_minutes> <AVG|MAX> <variable> <vwl> <vcl> <label> [units] */
+
+void
+print_usage (void)
+{
+ printf (_("\
+Usage: %s -F log_file -a <AVG | MAX> -v variable -w warning -c critical\n\
+ [-l label] [-u units] [-e expire_minutes] [-t timeout] [-v]\n"), progname);
+ printf (_(UT_HLP_VRS), progname, progname);
+}
diff --git a/plugins/check_mrtgtraf.c b/plugins/check_mrtgtraf.c
index ce9ab191..be2f562e 100644
--- a/plugins/check_mrtgtraf.c
+++ b/plugins/check_mrtgtraf.c
@@ -24,60 +24,10 @@ const char *revision = "$Revision$";
const char *copyright = "1999-2003";
const char *email = "nagiosplug-devel@lists.sourceforge.net";
-void
-print_usage (void)
-{
- printf (_("\
-Usage: %s -F <log_file> -a <AVG | MAX> -v <variable> -w <warning_pair> -c <critical_pair>\n\
- [-e expire_minutes] [-t timeout] [-v]\n"), progname);
- printf (_(UT_HLP_VRS), progname, progname);
-}
-
-void
-print_help (void)
-{
- print_revision (progname, revision);
-
- printf (_(COPYRIGHT), copyright, email);
-
- print_usage ();
-
- printf (_(UT_HELP_VRSN));
-
- printf (_("\
- -F, --filename=STRING\n\
- File to read log from\n\
- -e, --expires=INTEGER\n\
- Minutes after which log expires\n\
- -a, --aggregation=(AVG|MAX)\n\
- Test average or maximum\n\
- -w, --warning\n\
- Warning threshold pair \"<incoming>,<outgoing>\"\n\
- -c, --critical\n\
- Critical threshold pair \"<incoming>,<outgoing>\"\n"));
-
- printf (_("\n\
-This plugin will check the incoming/outgoing transfer rates of a router,\n\
-switch, etc recorded in an MRTG log. If the newest log entry is older\n\
-than <expire_minutes>, a WARNING status is returned. If either the\n\
-incoming or outgoing rates exceed the <icl> or <ocl> thresholds (in\n\
-Bytes/sec), a CRITICAL status results. If either of the rates exceed\n\
-the <iwl> or <owl> thresholds (in Bytes/sec), a WARNING status results.\n\n"));
-
- printf (_("Notes:\n\
-- MRTG stands for Multi Router Traffic Grapher. It can be downloaded from\n\
- http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/mrtg.html\n\
-- While MRTG can monitor things other than traffic rates, this\n\
- plugin probably won't work with much else without modification.\n\
-- The calculated i/o rates are a little off from what MRTG actually\n\
- reports. I'm not sure why this is right now, but will look into it\n\
- for future enhancements of this plugin.\n"));
-
- printf (_(UT_SUPPORT));
-}
-
int process_arguments (int, char **);
int validate_arguments (void);
+void print_help(void);
+void print_usage(void);
char *log_file = NULL;
int expire_minutes = -1;
@@ -87,6 +37,10 @@ unsigned long incoming_critical_threshold = 0L;
unsigned long outgoing_warning_threshold = 0L;
unsigned long outgoing_critical_threshold = 0L;
+
+
+
+
int
main (int argc, char **argv)
{
@@ -357,3 +311,64 @@ validate_arguments (void)
{
return OK;
}
+
+
+
+
+
+
+void
+print_help (void)
+{
+ print_revision (progname, revision);
+
+ printf (_("Copyright (c) 1999 Ethan Galstad <nagios@nagios.org>\n"));
+ printf (_(COPYRIGHT), copyright, email);
+
+ print_usage ();
+
+ printf (_(UT_HELP_VRSN));
+
+ printf (_("\
+ -F, --filename=STRING\n\
+ File to read log from\n\
+ -e, --expires=INTEGER\n\
+ Minutes after which log expires\n\
+ -a, --aggregation=(AVG|MAX)\n\
+ Test average or maximum\n\
+ -w, --warning\n\
+ Warning threshold pair \"<incoming>,<outgoing>\"\n\
+ -c, --critical\n\
+ Critical threshold pair \"<incoming>,<outgoing>\"\n"));
+
+ printf (_("\n\
+This plugin will check the incoming/outgoing transfer rates of a router,\n\
+switch, etc recorded in an MRTG log. If the newest log entry is older\n\
+than <expire_minutes>, a WARNING status is returned. If either the\n\
+incoming or outgoing rates exceed the <icl> or <ocl> thresholds (in\n\
+Bytes/sec), a CRITICAL status results. If either of the rates exceed\n\
+the <iwl> or <owl> thresholds (in Bytes/sec), a WARNING status results.\n\n"));
+
+ printf (_("Notes:\n\
+- MRTG stands for Multi Router Traffic Grapher. It can be downloaded from\n\
+ http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/mrtg.html\n\
+- While MRTG can monitor things other than traffic rates, this\n\
+ plugin probably won't work with much else without modification.\n\
+- The calculated i/o rates are a little off from what MRTG actually\n\
+ reports. I'm not sure why this is right now, but will look into it\n\
+ for future enhancements of this plugin.\n"));
+
+ printf (_(UT_SUPPORT));
+}
+
+
+
+
+void
+print_usage (void)
+{
+ printf (_("\
+Usage: %s -F <log_file> -a <AVG | MAX> -v <variable> -w <warning_pair> -c <critical_pair>\n\
+ [-e expire_minutes] [-t timeout] [-v]\n"), progname);
+ printf (_(UT_HLP_VRS), progname, progname);
+}
diff --git a/plugins/check_nwstat.c b/plugins/check_nwstat.c
index de8a6200..4b227269 100644
--- a/plugins/check_nwstat.c
+++ b/plugins/check_nwstat.c
@@ -75,9 +75,14 @@ enum checkvar vars_to_check = NONE;
int sap_number=-1;
int process_arguments(int, char **);
-void print_usage(void);
void print_help(void);
+void print_usage(void);
+
+
+
+
+
int
main(int argc, char **argv) {
int result;
@@ -878,15 +883,12 @@ int process_arguments(int argc, char **argv) {
return OK;
}
-
-void print_usage(void)
-{
- printf (_("\
-Usage: %s -H host [-p port] [-v variable] [-w warning] [-c critical]\n\
- [-t timeout].\n"), progname);
- printf (_(UT_HLP_VRS), progname, progname);
-}
+
+
+
+
+
void print_help(void)
{
char *myport;
@@ -894,7 +896,7 @@ void print_help(void)
print_revision (progname, revision);
- printf (_("Copyright (c) 1999-2001 Ethan Galstad <nagios@nagios.org>\n"));
+ printf (_("Copyright (c) 1999 Ethan Galstad <nagios@nagios.org>\n"));
printf (_(COPYRIGHT), copyright, email);
printf (_("\
@@ -972,3 +974,14 @@ Notes:\n\
printf (_(UT_SUPPORT));
}
+
+
+
+
+void print_usage(void)
+{
+ printf (_("\
+Usage: %s -H host [-p port] [-v variable] [-w warning] [-c critical]\n\
+ [-t timeout].\n"), progname);
+ printf (_(UT_HLP_VRS), progname, progname);
+}
diff --git a/plugins/check_overcr.c b/plugins/check_overcr.c
index 5f50ca7e..9958432e 100644
--- a/plugins/check_overcr.c
+++ b/plugins/check_overcr.c
@@ -106,17 +106,20 @@ main (int argc, char **argv)
temp_ptr = (char *) strtok (recv_buffer, "\r\n");
if (temp_ptr == NULL)
die (STATE_CRITICAL, _("Invalid response from server - no load information\n"));
- load_1min = strtod (temp_ptr, NULL);
+ else
+ load_1min = strtod (temp_ptr, NULL);
temp_ptr = (char *) strtok (NULL, "\r\n");
if (temp_ptr == NULL)
die (STATE_CRITICAL, _("Invalid response from server after load 1\n"));
- load_5min = strtod (temp_ptr, NULL);
+ else
+ load_5min = strtod (temp_ptr, NULL);
temp_ptr = (char *) strtok (NULL, "\r\n");
if (temp_ptr == NULL)
die (STATE_CRITICAL, _("Invalid response from server after load 5\n"));
- load_15min = strtod (temp_ptr, NULL);
+ else
+ load_15min = strtod (temp_ptr, NULL);
switch (vars_to_check) {
case LOAD1:
@@ -160,7 +163,8 @@ main (int argc, char **argv)
temp_ptr = (char *) strtok (NULL, "%");
if (temp_ptr == NULL)
die (STATE_CRITICAL, _("Invalid response from server\n"));
- percent_used_disk_space = strtoul (temp_ptr, NULL, 10);
+ else
+ percent_used_disk_space = strtoul (temp_ptr, NULL, 10);
break;
}
@@ -186,8 +190,8 @@ main (int argc, char **argv)
if (result != STATE_OK)
die (result, _("Unknown error fetching network status\n"));
-
- port_connections = strtod (recv_buffer, NULL);
+ else
+ port_connections = strtod (recv_buffer, NULL);
if (check_critical_value == TRUE && (port_connections >= critical_value))
result = STATE_CRITICAL;
@@ -215,8 +219,8 @@ main (int argc, char **argv)
temp_ptr = (char *) strtok (NULL, ")");
if (temp_ptr == NULL)
die (STATE_CRITICAL, _("Invalid response from server\n"));
-
- processes = strtod (temp_ptr, NULL);
+ else
+ processes = strtod (temp_ptr, NULL);
if (check_critical_value == TRUE && (processes >= critical_value))
result = STATE_CRITICAL;
@@ -264,11 +268,11 @@ main (int argc, char **argv)
}
/* reset timeout */
- alarm (0);
+/* alarm (0); */
- printf (_("Reached end of program with no data returned\n"));
+/* printf (_("Reached end of program with no data returned\n")); */
- return result;
+/* return result; */
}
diff --git a/plugins/check_ping.c b/plugins/check_ping.c
index 26c0192a..fd73b8ce 100644
--- a/plugins/check_ping.c
+++ b/plugins/check_ping.c
@@ -55,7 +55,7 @@ int verbose = FALSE;
float rta = UNKNOWN_TRIP_TIME;
int pl = UNKNOWN_PACKET_LOSS;
-char *warn_text = "";
+char *warn_text;
@@ -69,11 +69,10 @@ main (int argc, char **argv)
int this_result = STATE_UNKNOWN;
int i;
- addresses = malloc (max_addr);
+ addresses = malloc ((size_t)max_addr);
if (process_arguments (argc, argv) == ERROR)
usage (_("Could not parse arguments"));
- exit;
/* Set signal handling and alarm */
if (signal (SIGALRM, popen_timeout_alarm_handler) == SIG_ERR) {
@@ -113,7 +112,7 @@ main (int argc, char **argv)
/* run the command */
this_result = run_ping (cmd, addresses[i]);
- if (pl == UNKNOWN_PACKET_LOSS || rta == UNKNOWN_TRIP_TIME) {
+ if (pl == UNKNOWN_PACKET_LOSS || rta < 0.0) {
printf ("%s\n", cmd);
die (STATE_UNKNOWN,
_("Error: Could not interpret output from ping command\n"));
@@ -193,12 +192,15 @@ process_arguments (int argc, char **argv)
switch (c) {
case '?': /* usage */
usage3 (_("Unknown argument"), optopt);
+ break;
case 'h': /* help */
print_help ();
exit (STATE_OK);
+ break;
case 'V': /* version */
print_revision (progname, revision);
exit (STATE_OK);
+ break;
case 't': /* timeout period */
timeout_interval = atoi (optarg);
break;
@@ -221,7 +223,7 @@ process_arguments (int argc, char **argv)
n_addresses++;
if (n_addresses > max_addr) {
max_addr *= 2;
- addresses = realloc (addresses, max_addr);
+ addresses = realloc (addresses, (size_t)max_addr);
if (addresses == NULL)
die (STATE_UNKNOWN, _("Could not realloc() addresses\n"));
}
@@ -292,7 +294,7 @@ process_arguments (int argc, char **argv)
}
}
- if (wrta == UNKNOWN_TRIP_TIME) {
+ if (wrta < 0.0) {
if (is_negative (argv[c])) {
printf (_("<wrta> (%s) must be a non-negative number\n"), argv[c]);
return ERROR;
@@ -303,7 +305,7 @@ process_arguments (int argc, char **argv)
}
}
- if (crta == UNKNOWN_TRIP_TIME) {
+ if (crta < 0.0) {
if (is_negative (argv[c])) {
printf (_("<crta> (%s) must be a non-negative number\n"), argv[c]);
return ERROR;
@@ -346,11 +348,11 @@ validate_arguments ()
float max_seconds;
int i;
- if (wrta == UNKNOWN_TRIP_TIME) {
+ if (wrta < 0.0) {
printf (_("<wrta> was not set\n"));
return ERROR;
}
- else if (crta == UNKNOWN_TRIP_TIME) {
+ else if (crta < 0.0) {
printf (_("<crta> was not set\n"));
return ERROR;
}
@@ -397,10 +399,9 @@ run_ping (char *cmd, char *server_address)
char buf[MAX_INPUT_BUFFER];
int result = STATE_UNKNOWN;
- if ((child_process = spopen (cmd)) == NULL) {
- printf (_("Cannot open pipe: "));
- die (STATE_UNKNOWN, cmd);
- }
+ if ((child_process = spopen (cmd)) == NULL)
+ die (STATE_UNKNOWN, _("Cannot open pipe: %s"), cmd);
+
child_stderr = fdopen (child_stderr_array[fileno (child_process)], "r");
if (child_stderr == NULL)
printf (_("Cannot open stderr for %s\n"), cmd);
@@ -455,7 +456,7 @@ run_ping (char *cmd, char *server_address)
_("PING CRITICAL - Host not found (%s)"),
server_address);
- if (strlen (warn_text) == 0)
+ if (warn_text == NULL)
warn_text = strdup (buf);
else if (asprintf (&warn_text, "%s %s", warn_text, buf) == -1)
die (STATE_UNKNOWN, _("unable to realloc warn_text"));
@@ -472,6 +473,9 @@ run_ping (char *cmd, char *server_address)
if (spclose (child_process))
result = max_state (result, STATE_WARNING);
+ if (warn_text == NULL)
+ warn_text = strdup("");
+
return result;
}
diff --git a/plugins/check_procs.c b/plugins/check_procs.c
index 1b641c55..1894b281 100644
--- a/plugins/check_procs.c
+++ b/plugins/check_procs.c
@@ -49,12 +49,14 @@ int options = 0; /* bitmask of filter criteria to test against */
#define PCPU 256
/* Different metrics */
-int metric = 0;
-#define METRIC_PROCS 0
-#define METRIC_VSZ 1
-#define METRIC_RSS 2
-#define METRIC_CPU 3
-char *metric_name = "";
+char *metric_name;
+enum metric {
+ METRIC_PROCS,
+ METRIC_VSZ,
+ METRIC_RSS,
+ METRIC_CPU
+};
+enum metric metric = METRIC_PROCS;
int verbose = 0;
int uid;
@@ -62,11 +64,11 @@ int ppid;
int vsz;
int rss;
float pcpu;
-char *statopts = "";
-char *prog = "";
-char *args = "";
-char *fmt = "";
-char *fails = "";
+char *statopts;
+char *prog;
+char *args;
+char *fmt;
+char *fails;
char tmp[MAX_INPUT_BUFFER];
@@ -317,54 +319,35 @@ process_arguments (int argc, char **argv)
print_revision (progname, revision);
exit (STATE_OK);
case 't': /* timeout period */
- if (!is_integer (optarg)) {
- printf (_("%s: Timeout Interval must be an integer!\n\n"),
- progname);
- print_usage ();
- exit (STATE_UNKNOWN);
- }
- timeout_interval = atoi (optarg);
+ if (!is_integer (optarg))
+ usage (_("Timeout Interval must be an integer!\n\n"));
+ else
+ timeout_interval = atoi (optarg);
break;
case 'c': /* critical threshold */
- if (is_integer (optarg)) {
+ if (is_integer (optarg))
cmax = atoi (optarg);
+ else if (sscanf (optarg, ":%d", &cmax) == 1)
break;
- }
- else if (sscanf (optarg, ":%d", &cmax) == 1) {
+ else if (sscanf (optarg, "%d:%d", &cmin, &cmax) == 2)
break;
- }
- else if (sscanf (optarg, "%d:%d", &cmin, &cmax) == 2) {
+ else if (sscanf (optarg, "%d:", &cmin) == 1)
break;
- }
- else if (sscanf (optarg, "%d:", &cmin) == 1) {
- break;
- }
- else {
- printf (_("%s: Critical Process Count must be an integer!\n\n"),
- progname);
- print_usage ();
- exit (STATE_UNKNOWN);
- }
+ else
+ usage (_("Critical Process Count must be an integer!\n\n"));
+ break;
case 'w': /* warning time threshold */
- if (is_integer (optarg)) {
+ if (is_integer (optarg))
wmax = atoi (optarg);
+ else if (sscanf (optarg, ":%d", &wmax) == 1)
break;
- }
- else if (sscanf (optarg, ":%d", &wmax) == 1) {
- break;
- }
- else if (sscanf (optarg, "%d:%d", &wmin, &wmax) == 2) {
+ else if (sscanf (optarg, "%d:%d", &wmin, &wmax) == 2)
break;
- }
- else if (sscanf (optarg, "%d:", &wmin) == 1) {
+ else if (sscanf (optarg, "%d:", &wmin) == 1)
break;
- }
- else {
- printf (_("%s: Warning Process Count must be an integer!\n\n"),
- progname);
- print_usage ();
- exit (STATE_UNKNOWN);
- }
+ else
+ usage (_("%s: Warning Process Count must be an integer!\n\n"));
+ break;
case 'p': /* process id */
if (sscanf (optarg, "%d%[^0-9]", &ppid, tmp) == 1) {
asprintf (&fmt, "%s%sPPID = %d", fmt, (options ? ", " : ""), ppid);
@@ -376,7 +359,10 @@ process_arguments (int argc, char **argv)
print_usage ();
exit (STATE_UNKNOWN);
case 's': /* status */
- asprintf (&statopts, "%s", optarg);
+ if (statopts)
+ break;
+ else
+ statopts = strdup(optarg);
asprintf (&fmt, _("%s%sSTATE = %s"), fmt, (options ? ", " : ""), statopts);
options |= STAT;
break;
@@ -408,13 +394,19 @@ process_arguments (int argc, char **argv)
options |= USER;
break;
case 'C': /* command */
- asprintf (&prog, "%s", optarg);
+ if (prog)
+ break;
+ else
+ prog = strdup(optarg);
asprintf (&fmt, _("%s%scommand name '%s'"), fmt, (options ? ", " : ""),
prog);
options |= PROG;
break;
case 'a': /* args (full path name with args) */
- asprintf (&args, "%s", optarg);
+ if (args)
+ break;
+ else
+ args = strdup(optarg);
asprintf (&fmt, _("%s%sargs '%s'"), fmt, (options ? ", " : ""), args);
options |= ARGS;
break;
@@ -521,6 +513,21 @@ validate_arguments ()
if (options == 0)
options = ALL;
+ if (statopts==NULL)
+ statopts = strdup("");
+
+ if (prog==NULL)
+ prog = strdup("");
+
+ if (args==NULL)
+ args = strdup("");
+
+ if (fmt==NULL)
+ fmt = strdup("");
+
+ if (fails==NULL)
+ fails = strdup("");
+
return options;
}
diff --git a/plugins/check_real.c b/plugins/check_real.c
index ecdd5619..9c9c3e0b 100644
--- a/plugins/check_real.c
+++ b/plugins/check_real.c
@@ -38,10 +38,10 @@ void print_help (void);
void print_usage (void);
int server_port = PORT;
-char *server_address = "";
-char *host_name = "";
+char *server_address;
+char *host_name;
char *server_url = NULL;
-char *server_expect = EXPECT;
+char *server_expect;
int warning_time = 0;
int check_warning_time = FALSE;
int critical_time = 0;
@@ -294,18 +294,18 @@ process_arguments (int argc, char **argv)
switch (c) {
case 'I': /* hostname */
case 'H': /* hostname */
- if (is_host (optarg)) {
- server_address = optarg;
- }
- else {
+ if (server_address)
+ break;
+ else if (is_host (optarg))
+ server_address = strdup(optarg);
+ else
usage (_("Invalid host name\n"));
- }
break;
case 'e': /* string to expect in response header */
- server_expect = optarg;
+ server_expect = strdup(optarg);
break;
case 'u': /* server URL */
- server_url = optarg;
+ server_url = strdup(optarg);
break;
case 'p': /* port */
if (is_intpos (optarg)) {
@@ -356,7 +356,7 @@ process_arguments (int argc, char **argv)
}
c = optind;
- if (strlen(server_address)==0 && argc>c) {
+ if (server_address==NULL && argc>c) {
if (is_host (argv[c])) {
server_address = argv[c++];
}
@@ -365,11 +365,14 @@ process_arguments (int argc, char **argv)
}
}
- if (strlen(server_address) == 0)
+ if (server_address==NULL)
usage (_("You must provide a server to check\n"));
- if (strlen(host_name) == 0)
- asprintf (&host_name, "%s", server_address);
+ if (host_name==NULL)
+ host_name = strdup (server_address);
+
+ if (server_expect == NULL)
+ server_expect = strdup(EXPECT);
return validate_arguments ();
}
diff --git a/plugins/utils.c b/plugins/utils.c
index 518caa8c..5b975729 100644
--- a/plugins/utils.c
+++ b/plugins/utils.c
@@ -52,14 +52,14 @@ max_state (int a, int b)
return max (a, b);
}
-void usage (char *msg)
+void usage (const char *msg)
{
printf ("%s", msg);
print_usage ();
exit (STATE_UNKNOWN);
}
-void usage2(char *msg, char *arg)
+void usage2(const char *msg, const char *arg)
{
printf ("%s: %s - %s\n",progname,msg,arg);
print_usage ();
@@ -67,7 +67,7 @@ void usage2(char *msg, char *arg)
}
void
-usage3 (char *msg, int arg)
+usage3 (const char *msg, int arg)
{
printf ("%s: %s - %c\n", progname, msg, arg);
print_usage();
diff --git a/plugins/utils.h b/plugins/utils.h
index b763b1e2..efdbed41 100644
--- a/plugins/utils.h
+++ b/plugins/utils.h
@@ -71,9 +71,9 @@ char *strpcat (char *dest, const char *src, const char *str);
int max_state (int a, int b);
-void usage (char *msg) __attribute__((noreturn));
-void usage2(char *msg, char *arg) __attribute__((noreturn));
-void usage3(char *msg, int arg) __attribute__((noreturn));
+void usage (const char *msg) __attribute__((noreturn));
+void usage2(const char *msg, const char *arg) __attribute__((noreturn));
+void usage3(const char *msg, int arg) __attribute__((noreturn));
const char *state_text (int result);