2013-11-26 22:53:19 +00:00
|
|
|
#ifndef NP_UTILS_H
|
|
|
|
#define NP_UTILS_H
|
|
|
|
/* Header file for nagios plugins utils.c */
|
|
|
|
|
|
|
|
/* This file should be included in all plugins */
|
|
|
|
|
|
|
|
/* The purpose of this package is to provide safer alternatives to C
|
|
|
|
functions that might otherwise be vulnerable to hacking. This
|
|
|
|
currently includes a standard suite of validation routines to be sure
|
|
|
|
that an string argument acually converts to its intended type and a
|
|
|
|
suite of string handling routine that do their own memory management
|
|
|
|
in order to resist overflow attacks. In addition, a few functions are
|
|
|
|
provided to standardize version and error reporting across the entire
|
|
|
|
suite of plugins. */
|
|
|
|
|
|
|
|
/* now some functions etc are being defined in ../lib/utils_base.c */
|
|
|
|
#include "utils_base.h"
|
|
|
|
|
2013-11-26 22:55:28 +00:00
|
|
|
#ifdef NP_EXTRA_OPTS
|
|
|
|
/* Include extra-opts functions if compiled in */
|
|
|
|
#include "extra_opts.h"
|
|
|
|
#else
|
|
|
|
/* else, fake np_extra_opts */
|
|
|
|
#define np_extra_opts(acptr,av,pr) av
|
|
|
|
#endif
|
|
|
|
|
2013-11-26 22:53:19 +00:00
|
|
|
/* Standardize version information, termination */
|
|
|
|
|
|
|
|
void support (void);
|
|
|
|
void print_revision (const char *, const char *);
|
|
|
|
|
|
|
|
/* Handle timeouts */
|
|
|
|
|
|
|
|
#ifdef LOCAL_TIMEOUT_ALARM_HANDLER
|
2013-11-26 22:56:50 +00:00
|
|
|
extern unsigned int timeout_state;
|
2013-11-26 22:53:19 +00:00
|
|
|
extern unsigned int timeout_interval;
|
|
|
|
RETSIGTYPE timeout_alarm_handler (int);
|
|
|
|
#else
|
2013-11-26 22:56:50 +00:00
|
|
|
unsigned int timeout_state = STATE_CRITICAL;
|
2013-11-26 22:53:19 +00:00
|
|
|
unsigned int timeout_interval = DEFAULT_SOCKET_TIMEOUT;
|
|
|
|
extern RETSIGTYPE timeout_alarm_handler (int);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
time_t start_time, end_time;
|
|
|
|
|
|
|
|
/* Test input types */
|
|
|
|
|
|
|
|
int is_integer (char *);
|
|
|
|
int is_intpos (char *);
|
|
|
|
int is_intneg (char *);
|
|
|
|
int is_intnonneg (char *);
|
|
|
|
int is_intpercent (char *);
|
|
|
|
|
|
|
|
int is_numeric (char *);
|
|
|
|
int is_positive (char *);
|
|
|
|
int is_negative (char *);
|
|
|
|
int is_nonnegative (char *);
|
|
|
|
int is_percentage (char *);
|
|
|
|
|
|
|
|
int is_option (char *);
|
|
|
|
|
|
|
|
/* Generalized timer that will do milliseconds if available */
|
|
|
|
#ifndef HAVE_STRUCT_TIMEVAL
|
|
|
|
struct timeval {
|
|
|
|
long tv_sec; /* seconds */
|
|
|
|
long tv_usec; /* microseconds */
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef HAVE_GETTIMEOFDAY
|
|
|
|
int gettimeofday(struct timeval *, struct timezone *);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
double delta_time (struct timeval tv);
|
|
|
|
long deltime (struct timeval tv);
|
|
|
|
|
|
|
|
/* Handle strings safely */
|
|
|
|
|
|
|
|
void strip (char *);
|
|
|
|
char *strscpy (char *, const char *);
|
|
|
|
char *strnl (char *);
|
|
|
|
char *strpcpy (char *, const char *, const char *);
|
|
|
|
char *strpcat (char *, const char *, const char *);
|
|
|
|
|
|
|
|
int max_state (int a, int b);
|
2013-11-26 22:54:57 +00:00
|
|
|
int max_state_alt (int a, int b);
|
2013-11-26 22:53:19 +00:00
|
|
|
|
|
|
|
void usage (const char *) __attribute__((noreturn));
|
|
|
|
void usage2(const char *, const char *) __attribute__((noreturn));
|
|
|
|
void usage3(const char *, int) __attribute__((noreturn));
|
2013-11-26 22:53:44 +00:00
|
|
|
void usage4(const char *) __attribute__((noreturn));
|
|
|
|
void usage5(void) __attribute__((noreturn));
|
|
|
|
void usage_va(const char *fmt, ...) __attribute__((noreturn));
|
2013-11-26 22:53:19 +00:00
|
|
|
|
|
|
|
const char *state_text (int);
|
|
|
|
|
|
|
|
#define max(a,b) (((a)>(b))?(a):(b))
|
|
|
|
#define min(a,b) (((a)<(b))?(a):(b))
|
|
|
|
|
|
|
|
char *perfdata (const char *,
|
|
|
|
long int,
|
|
|
|
const char *,
|
|
|
|
int,
|
|
|
|
long int,
|
|
|
|
int,
|
|
|
|
long int,
|
|
|
|
int,
|
|
|
|
long int,
|
|
|
|
int,
|
|
|
|
long int);
|
|
|
|
|
|
|
|
char *fperfdata (const char *,
|
|
|
|
double,
|
|
|
|
const char *,
|
|
|
|
int,
|
|
|
|
double,
|
|
|
|
int,
|
|
|
|
double,
|
|
|
|
int,
|
|
|
|
double,
|
|
|
|
int,
|
|
|
|
double);
|
|
|
|
|
|
|
|
/* The idea here is that, although not every plugin will use all of these,
|
|
|
|
most will or should. Therefore, for consistency, these very common
|
|
|
|
options should have only these meanings throughout the overall suite */
|
|
|
|
|
|
|
|
#define STD_LONG_OPTS \
|
|
|
|
{"version",no_argument,0,'V'},\
|
|
|
|
{"verbose",no_argument,0,'v'},\
|
|
|
|
{"help",no_argument,0,'h'},\
|
|
|
|
{"timeout",required_argument,0,'t'},\
|
|
|
|
{"critical",required_argument,0,'c'},\
|
|
|
|
{"warning",required_argument,0,'w'},\
|
|
|
|
{"hostname",required_argument,0,'H'}
|
|
|
|
|
|
|
|
#define COPYRIGHT "Copyright (c) %s Nagios Plugin Development Team\n\
|
|
|
|
\t<%s>\n\n"
|
|
|
|
|
2013-11-26 22:57:29 +00:00
|
|
|
#define UT_HLP_VRS _("\
|
2013-11-26 22:53:19 +00:00
|
|
|
%s (-h | --help) for detailed help\n\
|
2013-11-26 22:57:29 +00:00
|
|
|
%s (-V | --version) for version information\n")
|
2013-11-26 22:53:19 +00:00
|
|
|
|
2013-11-26 22:57:29 +00:00
|
|
|
#define UT_HELP_VRSN _("\
|
2013-11-26 22:53:19 +00:00
|
|
|
\nOptions:\n\
|
|
|
|
-h, --help\n\
|
|
|
|
Print detailed help screen\n\
|
|
|
|
-V, --version\n\
|
2013-11-26 22:57:29 +00:00
|
|
|
Print version information\n")
|
2013-11-26 22:53:19 +00:00
|
|
|
|
2013-11-26 22:57:29 +00:00
|
|
|
#define UT_HOST_PORT _("\
|
2013-11-26 22:53:19 +00:00
|
|
|
-H, --hostname=ADDRESS\n\
|
|
|
|
Host name, IP Address, or unix socket (must be an absolute path)\n\
|
|
|
|
-%c, --port=INTEGER\n\
|
2013-11-26 22:57:29 +00:00
|
|
|
Port number (default: %s)\n")
|
2013-11-26 22:53:19 +00:00
|
|
|
|
2013-11-26 22:57:29 +00:00
|
|
|
#define UT_IPv46 _("\
|
2013-11-26 22:53:19 +00:00
|
|
|
-4, --use-ipv4\n\
|
|
|
|
Use IPv4 connection\n\
|
|
|
|
-6, --use-ipv6\n\
|
2013-11-26 22:57:29 +00:00
|
|
|
Use IPv6 connection\n")
|
2013-11-26 22:53:19 +00:00
|
|
|
|
2013-11-26 22:57:29 +00:00
|
|
|
#define UT_VERBOSE _("\
|
2013-11-26 22:53:19 +00:00
|
|
|
-v, --verbose\n\
|
2013-11-26 22:57:29 +00:00
|
|
|
Show details for command-line debugging (Nagios may truncate output)\n")
|
2013-11-26 22:53:19 +00:00
|
|
|
|
2013-11-26 22:57:29 +00:00
|
|
|
#define UT_WARN_CRIT _("\
|
2013-11-26 22:53:19 +00:00
|
|
|
-w, --warning=DOUBLE\n\
|
|
|
|
Response time to result in warning status (seconds)\n\
|
|
|
|
-c, --critical=DOUBLE\n\
|
2013-11-26 22:57:29 +00:00
|
|
|
Response time to result in critical status (seconds)\n")
|
2013-11-26 22:53:19 +00:00
|
|
|
|
2013-11-26 22:57:29 +00:00
|
|
|
#define UT_WARN_CRIT_RANGE _("\
|
2013-11-26 22:53:19 +00:00
|
|
|
-w, --warning=RANGE\n\
|
|
|
|
Warning range (format: start:end). Alert if outside this range\n\
|
|
|
|
-c, --critical=RANGE\n\
|
2013-11-26 22:57:29 +00:00
|
|
|
Critical range\n")
|
2013-11-26 22:53:19 +00:00
|
|
|
|
2013-11-26 22:57:29 +00:00
|
|
|
#define UT_TIMEOUT _("\
|
2013-11-26 22:53:19 +00:00
|
|
|
-t, --timeout=INTEGER\n\
|
2013-11-26 22:57:29 +00:00
|
|
|
Seconds before connection times out (default: %d)\n")
|
2013-11-26 22:53:19 +00:00
|
|
|
|
2013-11-26 22:55:28 +00:00
|
|
|
#ifdef NP_EXTRA_OPTS
|
2013-11-26 22:57:29 +00:00
|
|
|
#define UT_EXTRA_OPTS _("\
|
2013-11-26 22:55:28 +00:00
|
|
|
--extra-opts=[section][@file]\n\
|
2013-11-26 22:57:29 +00:00
|
|
|
Read options from an ini file. See http://nagiosplugins.org/extra-opts\n\
|
|
|
|
for usage and examples.\n")
|
2013-11-26 22:55:28 +00:00
|
|
|
#else
|
|
|
|
#define UT_EXTRA_OPTS ""
|
|
|
|
#endif
|
|
|
|
|
2013-11-26 22:57:29 +00:00
|
|
|
#define UT_THRESHOLDS_NOTES _("\
|
2013-11-26 22:55:28 +00:00
|
|
|
See:\n\
|
|
|
|
http://nagiosplug.sourceforge.net/developer-guidelines.html#THRESHOLDFORMAT\n\
|
2013-11-26 22:57:29 +00:00
|
|
|
for THRESHOLD format and examples.\n")
|
2013-11-26 22:55:28 +00:00
|
|
|
|
2013-11-26 22:57:29 +00:00
|
|
|
#define UT_SUPPORT _("\n\
|
2013-11-26 22:53:19 +00:00
|
|
|
Send email to nagios-users@lists.sourceforge.net if you have questions\n\
|
|
|
|
regarding use of this software. To submit patches or suggest improvements,\n\
|
2013-11-26 22:57:29 +00:00
|
|
|
send email to nagiosplug-devel@lists.sourceforge.net\n\n")
|
2013-11-26 22:53:19 +00:00
|
|
|
|
2013-11-26 22:57:29 +00:00
|
|
|
#define UT_NOWARRANTY _("\n\
|
2013-11-26 22:53:19 +00:00
|
|
|
The nagios plugins come with ABSOLUTELY NO WARRANTY. You may redistribute\n\
|
|
|
|
copies of the plugins under the terms of the GNU General Public License.\n\
|
2013-11-26 22:57:29 +00:00
|
|
|
For more information about these matters, see the file named COPYING.\n")
|
2013-11-26 22:53:19 +00:00
|
|
|
|
|
|
|
#endif /* NP_UTILS_H */
|