summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 7741c00)
raw | patch | inline | side by side (parent: 7741c00)
author | Benoit Mortier <opensides@users.sourceforge.net> | |
Mon, 14 Nov 2005 00:51:44 +0000 (00:51 +0000) | ||
committer | Benoit Mortier <opensides@users.sourceforge.net> | |
Mon, 14 Nov 2005 00:51:44 +0000 (00:51 +0000) |
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1282 f882894a-f735-0410-b71e-b25c423dba1c
diff --git a/plugins/check_dig.c b/plugins/check_dig.c
index bc4dcd5c74f9b95a0b8add40a59c02a1c320cba1..c9fce613b9266b792d9ed4482042577bcd8e86ee 100644 (file)
--- a/plugins/check_dig.c
+++ b/plugins/check_dig.c
const char *progname = "check_dig";
const char *revision = "$Revision$";
-const char *copyright = "2002-2004";
+const char *copyright = "2002-2005";
const char *email = "nagiosplug-devel@lists.sourceforge.net";
#include "common.h"
int
main (int argc, char **argv)
{
- char *command_line;
- output chld_out, chld_err;
- char *msg = NULL;
- size_t i;
- char *t;
- long microsec;
- double elapsed_time;
- int result = STATE_UNKNOWN;
-
- setlocale (LC_ALL, "");
- bindtextdomain (PACKAGE, LOCALEDIR);
- textdomain (PACKAGE);
-
- /* Set signal handling and alarm */
- if (signal (SIGALRM, popen_timeout_alarm_handler) == SIG_ERR)
- usage_va(_("Cannot catch SIGALRM"));
-
- if (process_arguments (argc, argv) == ERROR)
- usage_va(_("Could not parse arguments"));
-
- /* get the command to run */
- asprintf (&command_line, "%s @%s -p %d %s -t %s",
- PATH_TO_DIG, dns_server, server_port, query_address, record_type);
-
- alarm (timeout_interval);
- gettimeofday (&tv, NULL);
-
- if (verbose) {
- printf ("%s\n", command_line);
- if(expected_address != NULL) {
- printf (_("Looking for: '%s'\n"), expected_address);
- } else {
- printf (_("Looking for: '%s'\n"), query_address);
- }
- }
-
- /* run the command */
- if(np_runcmd(command_line, &chld_out, &chld_err, 0) != 0) {
- result = STATE_WARNING;
- msg = (char *)_("dig returned an error status");
- }
-
- for(i = 0; i < chld_out.lines; i++) {
- /* the server is responding, we just got the host name... */
- if (strstr (chld_out.line[i], ";; ANSWER SECTION:")) {
-
- /* loop through the whole 'ANSWER SECTION' */
- for(; i < chld_out.lines; i++) {
- /* get the host address */
- if (verbose)
- printf ("%s\n", chld_out.line[i]);
-
- if (strstr (chld_out.line[i], (expected_address == NULL ? query_address : expected_address)) != NULL) {
- msg = chld_out.line[i];
- result = STATE_OK;
-
- /* Translate output TAB -> SPACE */
- t = msg;
- while ((t = strchr(t, '\t')) != NULL) *t = ' ';
- break;
- }
- }
-
- if (result == STATE_UNKNOWN) {
- msg = (char *)_("Server not found in ANSWER SECTION");
- result = STATE_WARNING;
- }
-
- /* we found the answer section, so break out of the loop */
- break;
- }
- }
-
- if (result == STATE_UNKNOWN)
- msg = (char *)_("No ANSWER SECTION found");
-
- /* If we get anything on STDERR, at least set warning */
- if(chld_err.buflen > 0) {
- result = max_state(result, STATE_WARNING);
- if(!msg) for(i = 0; i < chld_err.lines; i++) {
- msg = strchr(chld_err.line[0], ':');
- if(msg) {
- msg++;
- break;
- }
- }
- }
-
- microsec = deltime (tv);
- elapsed_time = (double)microsec / 1.0e6;
-
- if (critical_interval > UNDEFINED && elapsed_time > critical_interval)
- result = STATE_CRITICAL;
-
- else if (warning_interval > UNDEFINED && elapsed_time > warning_interval)
- result = STATE_WARNING;
-
- printf ("DNS %s - %.3f seconds response time (%s)|%s\n",
- state_text (result), elapsed_time,
- msg ? msg : _("Probably a non-existent host/domain"),
- fperfdata("time", elapsed_time, "s",
- (warning_interval>UNDEFINED?TRUE:FALSE),
- warning_interval,
- (critical_interval>UNDEFINED?TRUE:FALSE),
- critical_interval,
- TRUE, 0, FALSE, 0));
- return result;
+ char *command_line;
+ output chld_out, chld_err;
+ char *msg = NULL;
+ size_t i;
+ char *t;
+ long microsec;
+ double elapsed_time;
+ int result = STATE_UNKNOWN;
+
+ setlocale (LC_ALL, "");
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
+ /* Set signal handling and alarm */
+ if (signal (SIGALRM, popen_timeout_alarm_handler) == SIG_ERR)
+ usage_va(_("Cannot catch SIGALRM"));
+
+ if (process_arguments (argc, argv) == ERROR)
+ usage_va(_("Could not parse arguments"));
+
+ /* get the command to run */
+ asprintf (&command_line, "%s @%s -p %d %s -t %s",
+ PATH_TO_DIG, dns_server, server_port, query_address, record_type);
+
+ alarm (timeout_interval);
+ gettimeofday (&tv, NULL);
+
+ if (verbose) {
+ printf ("%s\n", command_line);
+ if(expected_address != NULL) {
+ printf (_("Looking for: '%s'\n"), expected_address);
+ } else {
+ printf (_("Looking for: '%s'\n"), query_address);
+ }
+ }
+
+ /* run the command */
+ if(np_runcmd(command_line, &chld_out, &chld_err, 0) != 0) {
+ result = STATE_WARNING;
+ msg = (char *)_("dig returned an error status");
+ }
+
+ for(i = 0; i < chld_out.lines; i++) {
+ /* the server is responding, we just got the host name... */
+ if (strstr (chld_out.line[i], ";; ANSWER SECTION:")) {
+
+ /* loop through the whole 'ANSWER SECTION' */
+ for(; i < chld_out.lines; i++) {
+ /* get the host address */
+ if (verbose)
+ printf ("%s\n", chld_out.line[i]);
+
+ if (strstr (chld_out.line[i], (expected_address == NULL ? query_address : expected_address)) != NULL) {
+ msg = chld_out.line[i];
+ result = STATE_OK;
+
+ /* Translate output TAB -> SPACE */
+ t = msg;
+ while ((t = strchr(t, '\t')) != NULL) *t = ' ';
+ break;
+ }
+ }
+
+ if (result == STATE_UNKNOWN) {
+ msg = (char *)_("Server not found in ANSWER SECTION");
+ result = STATE_WARNING;
+ }
+
+ /* we found the answer section, so break out of the loop */
+ break;
+ }
+ }
+
+ if (result == STATE_UNKNOWN)
+ msg = (char *)_("No ANSWER SECTION found");
+
+ /* If we get anything on STDERR, at least set warning */
+ if(chld_err.buflen > 0) {
+ result = max_state(result, STATE_WARNING);
+ if(!msg) for(i = 0; i < chld_err.lines; i++) {
+ msg = strchr(chld_err.line[0], ':');
+ if(msg) {
+ msg++;
+ break;
+ }
+ }
+ }
+
+ microsec = deltime (tv);
+ elapsed_time = (double)microsec / 1.0e6;
+
+ if (critical_interval > UNDEFINED && elapsed_time > critical_interval)
+ result = STATE_CRITICAL;
+
+ else if (warning_interval > UNDEFINED && elapsed_time > warning_interval)
+ result = STATE_WARNING;
+
+ printf ("DNS %s - %.3f seconds response time (%s)|%s\n",
+ state_text (result), elapsed_time,
+ msg ? msg : _("Probably a non-existent host/domain"),
+ fperfdata("time", elapsed_time, "s",
+ (warning_interval>UNDEFINED?TRUE:FALSE),
+ warning_interval,
+ (critical_interval>UNDEFINED?TRUE:FALSE),
+ critical_interval,
+ TRUE, 0, FALSE, 0));
+ return result;
}
int
process_arguments (int argc, char **argv)
{
- int c;
-
- int option = 0;
- static struct option longopts[] = {
- {"hostname", required_argument, 0, 'H'},
- {"query_address", required_argument, 0, 'l'},
- {"warning", required_argument, 0, 'w'},
- {"critical", required_argument, 0, 'c'},
- {"timeout", required_argument, 0, 't'},
- {"verbose", no_argument, 0, 'v'},
- {"version", no_argument, 0, 'V'},
- {"help", no_argument, 0, 'h'},
- {"record_type", required_argument, 0, 'T'},
- {"expected_address", required_argument, 0, 'a'},
- {0, 0, 0, 0}
- };
-
- if (argc < 2)
- return ERROR;
-
- while (1) {
- c = getopt_long (argc, argv, "hVvt:l:H:w:c:T:a:", longopts, &option);
-
- if (c == -1 || c == EOF)
- break;
-
- switch (c) {
- case 'h': /* help */
- print_help ();
- exit (STATE_OK);
- case 'V': /* version */
- print_revision (progname, revision);
- exit (STATE_OK);
- case 'H': /* hostname */
- host_or_die(optarg);
- dns_server = optarg;
- break;
- case 'p': /* server port */
- if (is_intpos (optarg)) {
- server_port = atoi (optarg);
- }
- else {
- usage_va(_("Port must be a positive integer - %s"), optarg);
- }
- break;
- case 'l': /* address to lookup */
- query_address = optarg;
- break;
- case 'w': /* warning */
- if (is_nonnegative (optarg)) {
- warning_interval = strtod (optarg, NULL);
- }
- else {
- usage_va(_("Warning interval must be a positive integer - %s"), optarg);
- }
- break;
- case 'c': /* critical */
- if (is_nonnegative (optarg)) {
- critical_interval = strtod (optarg, NULL);
- }
- else {
- usage_va(_("Critical interval must be a positive integer - %s"), optarg);
- }
- break;
- case 't': /* timeout */
- if (is_intnonneg (optarg)) {
- timeout_interval = atoi (optarg);
- }
- else {
- usage_va(_("Timeout interval must be a positive integer - %s"), optarg);
- }
- break;
- case 'v': /* verbose */
- verbose = TRUE;
- break;
- case 'T':
- record_type = optarg;
- break;
- case 'a':
- expected_address = optarg;
- break;
- default: /* usage_va */
- usage_va(_("Unknown argument - %s"), optarg);
- }
- }
-
- c = optind;
- if (dns_server == NULL) {
- if (c < argc) {
- host_or_die(argv[c]);
- dns_server = argv[c];
- }
- else {
- dns_server = strdup ("127.0.0.1");
- }
- }
-
- return validate_arguments ();
+ int c;
+
+ int option = 0;
+ static struct option longopts[] = {
+ {"hostname", required_argument, 0, 'H'},
+ {"query_address", required_argument, 0, 'l'},
+ {"warning", required_argument, 0, 'w'},
+ {"critical", required_argument, 0, 'c'},
+ {"timeout", required_argument, 0, 't'},
+ {"verbose", no_argument, 0, 'v'},
+ {"version", no_argument, 0, 'V'},
+ {"help", no_argument, 0, 'h'},
+ {"record_type", required_argument, 0, 'T'},
+ {"expected_address", required_argument, 0, 'a'},
+ {0, 0, 0, 0}
+ };
+
+ if (argc < 2)
+ return ERROR;
+
+ while (1) {
+ c = getopt_long (argc, argv, "hVvt:l:H:w:c:T:a:", longopts, &option);
+
+ if (c == -1 || c == EOF)
+ break;
+
+ switch (c) {
+ case 'h': /* help */
+ print_help ();
+ exit (STATE_OK);
+ case 'V': /* version */
+ print_revision (progname, revision);
+ exit (STATE_OK);
+ case 'H': /* hostname */
+ host_or_die(optarg);
+ dns_server = optarg;
+ break;
+ case 'p': /* server port */
+ if (is_intpos (optarg)) {
+ server_port = atoi (optarg);
+ }
+ else {
+ usage_va(_("Port must be a positive integer - %s"), optarg);
+ }
+ break;
+ case 'l': /* address to lookup */
+ query_address = optarg;
+ break;
+ case 'w': /* warning */
+ if (is_nonnegative (optarg)) {
+ warning_interval = strtod (optarg, NULL);
+ }
+ else {
+ usage_va(_("Warning interval must be a positive integer - %s"), optarg);
+ }
+ break;
+ case 'c': /* critical */
+ if (is_nonnegative (optarg)) {
+ critical_interval = strtod (optarg, NULL);
+ }
+ else {
+ usage_va(_("Critical interval must be a positive integer - %s"), optarg);
+ }
+ break;
+ case 't': /* timeout */
+ if (is_intnonneg (optarg)) {
+ timeout_interval = atoi (optarg);
+ }
+ else {
+ usage_va(_("Timeout interval must be a positive integer - %s"), optarg);
+ }
+ break;
+ case 'v': /* verbose */
+ verbose = TRUE;
+ break;
+ case 'T':
+ record_type = optarg;
+ break;
+ case 'a':
+ expected_address = optarg;
+ break;
+ default: /* usage_va */
+ usage_va(_("Unknown argument - %s"), optarg);
+ }
+ }
+
+ c = optind;
+ if (dns_server == NULL) {
+ if (c < argc) {
+ host_or_die(argv[c]);
+ dns_server = argv[c];
+ }
+ else {
+ dns_server = strdup ("127.0.0.1");
+ }
+ }
+
+ return validate_arguments ();
}
int
validate_arguments (void)
{
- return OK;
+ return OK;
}
void
print_help (void)
{
- char *myport;
+ char *myport;
- asprintf (&myport, "%d", DEFAULT_PORT);
+ asprintf (&myport, "%d", DEFAULT_PORT);
- print_revision (progname, revision);
+ print_revision (progname, revision);
- printf ("Copyright (c) 2000 Karl DeBisschop <kdebisschop@users.sourceforge.net>\n");
- printf (COPYRIGHT, copyright, email);
+ printf ("Copyright (c) 2000 Karl DeBisschop <kdebisschop@users.sourceforge.net>\n");
+ printf (COPYRIGHT, copyright, email);
- printf (_("Test the DNS service on the specified host using dig\n\n"));
+ printf (_("This plugin test the DNS service on the specified host using dig"));
- print_usage ();
+ printf ("\n\n");
- printf (_(UT_HELP_VRSN));
+ print_usage ();
- printf (_(UT_HOST_PORT), 'P', myport);
+ printf (_(UT_HELP_VRSN));
- printf (_("\
- -l, --lookup=STRING\n\
- machine name to lookup\n"));
+ printf (_(UT_HOST_PORT), 'P', myport);
- printf (_("\
- -T, --record_type=STRING\n\
- record type to lookup (default: A)\n"));
+ printf ("-l, --lookup=STRING");
+
+ printf ("\n");
- printf (_("\
- -a, --expected_address=STRING\n\
- an address expected to be in the answer section.\n\
- if not set, uses whatever was in -l\n"));
+ printf (_("machine name to lookup"));
- printf (_(UT_WARN_CRIT));
+ printf ("\n");
- printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT);
+ printf ("-T, --record_type=STRING");
- printf (_(UT_VERBOSE));
+ printf ("\n");
- printf (_(UT_SUPPORT));
+ printf (_("record type to lookup (default: A)"));
+
+ printf ("\n");
+
+ printf ("-a, --expected_address=STRING");
+
+ printf ("\n");
+
+ printf (_("an address expected to be in the answer section.if not set, uses whatever was in -l"));
+
+ printf ("\n");
+
+ printf (_(UT_WARN_CRIT));
+
+ printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT);
+
+ printf (_(UT_VERBOSE));
+
+ printf (_(UT_SUPPORT));
}
void
print_usage (void)
{
- printf ("\
-Usage: %s -H host -l lookup [-p <server port>] [-T <query type>]\n\
- [-w <warning interval>] [-c <critical interval>] [-t <timeout>]\n\
- [-a <expected answer address>] [-v]\n", progname);
+ printf (_("Usage:"));
+ printf ("%s -H host -l lookup [-p <server port>] [-T <query type>]", progname);
+ printf (" [-w <warning interval>] [-c <critical interval>] [-t <timeout>]");
+ printf (" [-a <expected answer address>] [-v]\n");
}
diff --git a/plugins/check_disk.c b/plugins/check_disk.c
index 81dd6c73def9d18944326bf3d276413472e81de6..3a5f47610434d4737b138930a6c7ca4e8d9297ba 100644 (file)
--- a/plugins/check_disk.c
+++ b/plugins/check_disk.c
*****************************************************************************/
const char *progname = "check_disk";
-const char *program_name = "check_disk"; /* Required for coreutils libs */
+const char *program_name = "check_disk"; /* Required for coreutils libs */
const char *revision = "$Revision$";
-const char *copyright = "1999-2004";
+const char *copyright = "1999-2005";
const char *email = "nagiosplug-devel@lists.sourceforge.net";
/*
int
main (int argc, char **argv)
{
- double usp = -1.0, uisp = -1.0;
- int result = STATE_UNKNOWN;
- int disk_result = STATE_UNKNOWN;
- char file_system[MAX_INPUT_BUFFER];
- char *output;
- char *details;
- char *perf;
- uintmax_t psize;
- float free_space, free_space_pct, total_space, inode_space_pct;
-
- struct mount_entry *me;
- struct fs_usage fsp;
- struct name_list *temp_list;
-
- output = strdup (" - free space:");
- details = strdup ("");
- perf = strdup ("");
-
- setlocale (LC_ALL, "");
- bindtextdomain (PACKAGE, LOCALEDIR);
- textdomain (PACKAGE);
-
- mount_list = read_filesystem_list (0);
-
- if (process_arguments (argc, argv) == ERROR)
- usage4 (_("Could not parse arguments"));
-
- /* if a list of paths has been selected, preseed the list with
- * the longest matching filesystem name by iterating across
- * the mountlist once ahead of time. this will allow a query on
- * "/var/log" to return information about "/var" if no "/var/log"
- * filesystem exists, etc. this is the default behavior already
- * with df-based checks, but for systems with their own space
- * checking routines, this should make them more consistent.
- */
- if(path_select_list){
- for (me = mount_list; me; me = me->me_next) {
- walk_name_list(path_select_list, me->me_mountdir);
- walk_name_list(path_select_list, me->me_devname);
- }
- /* now pretend we never saw anything, but keep found_len.
- * thus future searches will only match the best match */
- for (temp_list = path_select_list; temp_list; temp_list=temp_list->name_next){
- temp_list->found=0;
- }
- }
-
- /* for every mount entry */
- for (me = mount_list; me; me = me->me_next) {
- /* if there's a list of paths to select, the current mount
- * entry matches in path or device name, get fs usage */
- if (path_select_list &&
- (walk_name_list (path_select_list, me->me_mountdir) ||
- walk_name_list (path_select_list, me->me_devname) ) ) {
- get_fs_usage (me->me_mountdir, me->me_devname, &fsp);
- /* else if there's a list of paths/devices to select (but
- * we didn't match above) skip to the next mount entry */
- } else if (dev_select_list || path_select_list) {
- continue;
- /* skip remote filesystems if we're not interested in them */
- } else if (me->me_remote && show_local_fs) {
- continue;
- /* skip pseudo fs's if we haven't asked for all fs's */
- } else if (me->me_dummy && !show_all_fs) {
- continue;
- /* skip excluded fstypes */
- } else if (fs_exclude_list && walk_name_list (fs_exclude_list, me->me_type)) {
- continue;
- /* skip excluded fs's */
- } else if (dp_exclude_list &&
- (walk_name_list (dp_exclude_list, me->me_devname) ||
- walk_name_list (dp_exclude_list, me->me_mountdir))) {
- continue;
- /* otherwise, get fs usage */
- } else {
- get_fs_usage (me->me_mountdir, me->me_devname, &fsp);
- }
-
- if (fsp.fsu_blocks && strcmp ("none", me->me_mountdir)) {
- usp = (double)(fsp.fsu_blocks - fsp.fsu_bavail) * 100 / fsp.fsu_blocks;
+ double usp = -1.0, uisp = -1.0;
+ int result = STATE_UNKNOWN;
+ int disk_result = STATE_UNKNOWN;
+ char file_system[MAX_INPUT_BUFFER];
+ char *output;
+ char *details;
+ char *perf;
+ uintmax_t psize;
+ float free_space, free_space_pct, total_space, inode_space_pct;
+
+ struct mount_entry *me;
+ struct fs_usage fsp;
+ struct name_list *temp_list;
+
+ output = strdup (" - free space:");
+ details = strdup ("");
+ perf = strdup ("");
+
+ setlocale (LC_ALL, "");
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
+ mount_list = read_filesystem_list (0);
+
+ if (process_arguments (argc, argv) == ERROR)
+ usage4 (_("Could not parse arguments"));
+
+ /* if a list of paths has been selected, preseed the list with
+ * the longest matching filesystem name by iterating across
+ * the mountlist once ahead of time. this will allow a query on
+ * "/var/log" to return information about "/var" if no "/var/log"
+ * filesystem exists, etc. this is the default behavior already
+ * with df-based checks, but for systems with their own space
+ * checking routines, this should make them more consistent.
+ */
+ if(path_select_list){
+ for (me = mount_list; me; me = me->me_next) {
+ walk_name_list(path_select_list, me->me_mountdir);
+ walk_name_list(path_select_list, me->me_devname);
+ }
+ /* now pretend we never saw anything, but keep found_len.
+ * thus future searches will only match the best match */
+ for (temp_list = path_select_list; temp_list; temp_list=temp_list->name_next){
+ temp_list->found=0;
+ }
+ }
+
+ /* for every mount entry */
+ for (me = mount_list; me; me = me->me_next) {
+ /* if there's a list of paths to select, the current mount
+ * entry matches in path or device name, get fs usage */
+ if (path_select_list &&
+ (walk_name_list (path_select_list, me->me_mountdir) ||
+ walk_name_list (path_select_list, me->me_devname) ) ) {
+ get_fs_usage (me->me_mountdir, me->me_devname, &fsp);
+ /* else if there's a list of paths/devices to select (but
+ * we didn't match above) skip to the next mount entry */
+ } else if (dev_select_list || path_select_list) {
+ continue;
+ /* skip remote filesystems if we're not interested in them */
+ } else if (me->me_remote && show_local_fs) {
+ continue;
+ /* skip pseudo fs's if we haven't asked for all fs's */
+ } else if (me->me_dummy && !show_all_fs) {
+ continue;
+ /* skip excluded fstypes */
+ } else if (fs_exclude_list && walk_name_list (fs_exclude_list, me->me_type)) {
+ continue;
+ /* skip excluded fs's */
+ } else if (dp_exclude_list &&
+ (walk_name_list (dp_exclude_list, me->me_devname) ||
+ walk_name_list (dp_exclude_list, me->me_mountdir))) {
+ continue;
+ /* otherwise, get fs usage */
+ } else {
+ get_fs_usage (me->me_mountdir, me->me_devname, &fsp);
+ }
+
+ if (fsp.fsu_blocks && strcmp ("none", me->me_mountdir)) {
+ usp = (double)(fsp.fsu_blocks - fsp.fsu_bavail) * 100 / fsp.fsu_blocks;
uisp = (double)(fsp.fsu_files - fsp.fsu_ffree) * 100 / fsp.fsu_files;
- disk_result = check_disk (usp, fsp.fsu_bavail, uisp);
+ disk_result = check_disk (usp, fsp.fsu_bavail, uisp);
- result = max_state (disk_result, result);
- psize = fsp.fsu_blocks*fsp.fsu_blocksize/mult;
+ result = max_state (disk_result, result);
+ psize = fsp.fsu_blocks*fsp.fsu_blocksize/mult;
/* Moved this computation up here so we can add it
inode_space_pct = (float)fsp.fsu_ffree*100/fsp.fsu_files;
- asprintf (&perf, "%s %s", perf,
- perfdata ((!strcmp(file_system, "none") || display_mntp) ? me->me_devname : me->me_mountdir,
- psize-(fsp.fsu_bavail*fsp.fsu_blocksize/mult), units,
- TRUE, min ((uintmax_t)psize-(uintmax_t)w_df, (uintmax_t)((1.0-w_dfp/100.0)*psize)),
- TRUE, min ((uintmax_t)psize-(uintmax_t)c_df, (uintmax_t)((1.0-c_dfp/100.0)*psize)),
+ asprintf (&perf, "%s %s", perf,
+ perfdata ((!strcmp(file_system, "none") || display_mntp) ? me->me_devname : me->me_mountdir,
+ psize-(fsp.fsu_bavail*fsp.fsu_blocksize/mult), units,
+ TRUE, min ((uintmax_t)psize-(uintmax_t)w_df, (uintmax_t)((1.0-w_dfp/100.0)*psize)),
+ TRUE, min ((uintmax_t)psize-(uintmax_t)c_df, (uintmax_t)((1.0-c_dfp/100.0)*psize)),
TRUE, inode_space_pct,
- TRUE, psize));
- if (disk_result==STATE_OK && erronly && !verbose)
- continue;
-
- free_space = (float)fsp.fsu_bavail*fsp.fsu_blocksize/mult;
- free_space_pct = (float)fsp.fsu_bavail*100/fsp.fsu_blocks;
- total_space = (float)fsp.fsu_blocks*fsp.fsu_blocksize/mult;
- if (disk_result!=STATE_OK || verbose>=0)
- asprintf (&output, ("%s %s %.0f %s (%.0f%% inode=%.0f%%);"),
- output,
- (!strcmp(file_system, "none") || display_mntp) ? me->me_devname : me->me_mountdir,
- free_space,
- units,
- free_space_pct,
- inode_space_pct);
-
- asprintf (&details, _("%s\n\
+ TRUE, psize));
+ if (disk_result==STATE_OK && erronly && !verbose)
+ continue;
+
+ free_space = (float)fsp.fsu_bavail*fsp.fsu_blocksize/mult;
+ free_space_pct = (float)fsp.fsu_bavail*100/fsp.fsu_blocks;
+ total_space = (float)fsp.fsu_blocks*fsp.fsu_blocksize/mult;
+ if (disk_result!=STATE_OK || verbose>=0)
+ asprintf (&output, ("%s %s %.0f %s (%.0f%% inode=%.0f%%);"),
+ output,
+ (!strcmp(file_system, "none") || display_mntp) ? me->me_devname : me->me_mountdir,
+ free_space,
+ units,
+ free_space_pct,
+ inode_space_pct);
+
+ asprintf (&details, _("%s\n\
%.0f of %.0f %s (%.0f%% inode=%.0f%%) free on %s (type %s mounted on %s) warn:%lu crit:%lu warn%%:%.0f%% crit%%:%.0f%%"),
- details, free_space, total_space, units, free_space_pct, inode_space_pct,
- me->me_devname, me->me_type, me->me_mountdir,
- (unsigned long)w_df, (unsigned long)c_df, w_dfp, c_dfp);
+ details, free_space, total_space, units, free_space_pct, inode_space_pct,
+ me->me_devname, me->me_type, me->me_mountdir,
+ (unsigned long)w_df, (unsigned long)c_df, w_dfp, c_dfp);
- }
+ }
- }
+ }
- asprintf (&output, "%s|%s", output, perf);
+ asprintf (&output, "%s|%s", output, perf);
- if (verbose > 2)
- asprintf (&output, "%s%s", output, details);
+ if (verbose > 2)
+ asprintf (&output, "%s%s", output, details);
- /* Override result if paths specified and not found */
- temp_list = path_select_list;
- while (temp_list) {
- if (!temp_list->found) {
- asprintf (&output, _("%s [%s not found]"), output, temp_list->name);
- result = STATE_CRITICAL;
- }
- temp_list = temp_list->name_next;
- }
+ /* Override result if paths specified and not found */
+ temp_list = path_select_list;
+ while (temp_list) {
+ if (!temp_list->found) {
+ asprintf (&output, _("%s [%s not found]"), output, temp_list->name);
+ result = STATE_CRITICAL;
+ }
+ temp_list = temp_list->name_next;
+ }
- printf ("DISK %s%s\n", state_text (result), output);
- return result;
+ printf ("DISK %s%s\n", state_text (result), output);
+ return result;
}
int
process_arguments (int argc, char **argv)
{
- int c;
- struct name_list *se;
- struct name_list **pathtail = &path_select_list;
- struct name_list **fstail = &fs_exclude_list;
- struct name_list **dptail = &dp_exclude_list;
- struct name_list *temp_list;
- int result = OK;
-
- unsigned long l;
-
- int option = 0;
- static struct option longopts[] = {
- {"timeout", required_argument, 0, 't'},
- {"warning", required_argument, 0, 'w'},
- {"critical", required_argument, 0, 'c'},
- {"iwarning", required_argument, 0, 'W'},
- /* Dang, -C is taken. We might want to reshuffle this. */
- {"icritical", required_argument, 0, 'K'},
- {"local", required_argument, 0, 'l'},
- {"kilobytes", required_argument, 0, 'k'},
- {"megabytes", required_argument, 0, 'm'},
- {"units", required_argument, 0, 'u'},
- {"path", required_argument, 0, 'p'},
- {"partition", required_argument, 0, 'p'},
- {"exclude_device", required_argument, 0, 'x'},
- {"exclude-type", required_argument, 0, 'X'},
- {"mountpoint", no_argument, 0, 'M'},
- {"errors-only", no_argument, 0, 'e'},
- {"verbose", no_argument, 0, 'v'},
- {"quiet", no_argument, 0, 'q'},
- {"clear", no_argument, 0, 'C'},
- {"version", no_argument, 0, 'V'},
- {"help", no_argument, 0, 'h'},
- {0, 0, 0, 0}
- };
-
- if (argc < 2)
- return ERROR;
-
- se = (struct name_list *) malloc (sizeof (struct name_list));
- se->name = strdup ("iso9660");
- se->name_next = NULL;
- se->found = 0;
- se->found_len = 0;
- *fstail = se;
- fstail = &se->name_next;
-
- for (c = 1; c < argc; c++)
- if (strcmp ("-to", argv[c]) == 0)
- strcpy (argv[c], "-t");
-
- while (1) {
- c = getopt_long (argc, argv, "+?VqhveCt:c:w:K:W:u:p:x:X:mklM", longopts, &option);
-
- if (c == -1 || c == EOF)
- break;
-
- switch (c) {
- case 't': /* timeout period */
- if (is_integer (optarg)) {
- timeout_interval = atoi (optarg);
- break;
- }
- else {
- usage2 (_("Timeout interval must be a positive integer"), optarg);
- }
- case 'w': /* warning threshold */
- if (is_intnonneg (optarg)) {
- w_df = atoi (optarg);
- break;
- }
- else if (strpbrk (optarg, ",:") &&
- strstr (optarg, "%") &&
- sscanf (optarg, "%lu%*[:,]%lf%%", &l, &w_dfp) == 2) {
- w_df = (uintmax_t)l;
- break;
- }
- else if (strstr (optarg, "%") && sscanf (optarg, "%lf%%", &w_dfp) == 1) {
- break;
- }
- else {
- usage4 (_("Warning threshold must be integer or percentage!"));
- }
- case 'c': /* critical threshold */
- if (is_intnonneg (optarg)) {
- c_df = atoi (optarg);
- break;
- }
- else if (strpbrk (optarg, ",:") &&
- strstr (optarg, "%") &&
- sscanf (optarg, "%lu%*[,:]%lf%%", &l, &c_dfp) == 2) {
- c_df = (uintmax_t)l;
- break;
- }
- else if (strstr (optarg, "%") && sscanf (optarg, "%lf%%", &c_dfp) == 1) {
- break;
- }
- else {
- usage4 (_("Critical threshold must be integer or percentage!"));
- }
+ int c;
+ struct name_list *se;
+ struct name_list **pathtail = &path_select_list;
+ struct name_list **fstail = &fs_exclude_list;
+ struct name_list **dptail = &dp_exclude_list;
+ struct name_list *temp_list;
+ int result = OK;
+
+ unsigned long l;
+
+ int option = 0;
+ static struct option longopts[] = {
+ {"timeout", required_argument, 0, 't'},
+ {"warning", required_argument, 0, 'w'},
+ {"critical", required_argument, 0, 'c'},
+ {"iwarning", required_argument, 0, 'W'},
+ /* Dang, -C is taken. We might want to reshuffle this. */
+ {"icritical", required_argument, 0, 'K'},
+ {"local", required_argument, 0, 'l'},
+ {"kilobytes", required_argument, 0, 'k'},
+ {"megabytes", required_argument, 0, 'm'},
+ {"units", required_argument, 0, 'u'},
+ {"path", required_argument, 0, 'p'},
+ {"partition", required_argument, 0, 'p'},
+ {"exclude_device", required_argument, 0, 'x'},
+ {"exclude-type", required_argument, 0, 'X'},
+ {"mountpoint", no_argument, 0, 'M'},
+ {"errors-only", no_argument, 0, 'e'},
+ {"verbose", no_argument, 0, 'v'},
+ {"quiet", no_argument, 0, 'q'},
+ {"clear", no_argument, 0, 'C'},
+ {"version", no_argument, 0, 'V'},
+ {"help", no_argument, 0, 'h'},
+ {0, 0, 0, 0}
+ };
+
+ if (argc < 2)
+ return ERROR;
+
+ se = (struct name_list *) malloc (sizeof (struct name_list));
+ se->name = strdup ("iso9660");
+ se->name_next = NULL;
+ se->found = 0;
+ se->found_len = 0;
+ *fstail = se;
+ fstail = &se->name_next;
+
+ for (c = 1; c < argc; c++)
+ if (strcmp ("-to", argv[c]) == 0)
+ strcpy (argv[c], "-t");
+
+ while (1) {
+ c = getopt_long (argc, argv, "+?VqhveCt:c:w:K:W:u:p:x:X:mklM", longopts, &option);
+
+ if (c == -1 || c == EOF)
+ break;
+
+ switch (c) {
+ case 't': /* timeout period */
+ if (is_integer (optarg)) {
+ timeout_interval = atoi (optarg);
+ break;
+ }
+ else {
+ usage2 (_("Timeout interval must be a positive integer"), optarg);
+ }
+ case 'w': /* warning threshold */
+ if (is_intnonneg (optarg)) {
+ w_df = atoi (optarg);
+ break;
+ }
+ else if (strpbrk (optarg, ",:") &&
+ strstr (optarg, "%") &&
+ sscanf (optarg, "%lu%*[:,]%lf%%", &l, &w_dfp) == 2) {
+ w_df = (uintmax_t)l;
+ break;
+ }
+ else if (strstr (optarg, "%") && sscanf (optarg, "%lf%%", &w_dfp) == 1) {
+ break;
+ }
+ else {
+ usage4 (_("Warning threshold must be integer or percentage!"));
+ }
+ case 'c': /* critical threshold */
+ if (is_intnonneg (optarg)) {
+ c_df = atoi (optarg);
+ break;
+ }
+ else if (strpbrk (optarg, ",:") &&
+ strstr (optarg, "%") &&
+ sscanf (optarg, "%lu%*[,:]%lf%%", &l, &c_dfp) == 2) {
+ c_df = (uintmax_t)l;
+ break;
+ }
+ else if (strstr (optarg, "%") && sscanf (optarg, "%lf%%", &c_dfp) == 1) {
+ break;
+ }
+ else {
+ usage4 (_("Critical threshold must be integer or percentage!"));
+ }
case 'W': /* warning inode threshold */
break;
}
else {
- usage (_("Warning inode threshold must be percentage!\n"));
- }
+ usage (_("Warning inode threshold must be percentage!\n"));
+ }
case 'K': /* kritical inode threshold */
if (strstr (optarg, "%") && sscanf (optarg, "%lf%%", &c_idfp) == 1) {
break;
}
else {
- usage (_("Critical inode threshold must be percentage!\n"));
+ usage (_("Critical inode threshold must be percentage!\n"));
}
- case 'u':
- if (units)
- free(units);
- if (! strcmp (optarg, "bytes")) {
- mult = (uintmax_t)1;
- units = strdup ("B");
- } else if (! strcmp (optarg, "kB")) {
- mult = (uintmax_t)1024;
- units = strdup ("kB");
- } else if (! strcmp (optarg, "MB")) {
- mult = (uintmax_t)1024 * 1024;
- units = strdup ("MB");
- } else if (! strcmp (optarg, "GB")) {
- mult = (uintmax_t)1024 * 1024 * 1024;
- units = strdup ("GB");
- } else if (! strcmp (optarg, "TB")) {
- mult = (uintmax_t)1024 * 1024 * 1024 * 1024;
- units = strdup ("TB");
- } else {
- die (STATE_UNKNOWN, _("unit type %s not known\n"), optarg);
- }
- if (units == NULL)
- die (STATE_UNKNOWN, _("failed allocating storage for '%s'\n"), "units");
- break;
- case 'k': /* display mountpoint */
- mult = 1024;
- if (units)
- free(units);
- units = strdup ("kB");
- break;
- case 'm': /* display mountpoint */
- mult = 1024 * 1024;
- if (units)
- free(units);
- units = strdup ("MB");
- break;
- case 'l':
- show_local_fs = 1;
- break;
- case 'p': /* select path */
- se = (struct name_list *) malloc (sizeof (struct name_list));
- se->name = optarg;
- se->name_next = NULL;
- se->w_df = w_df;
- se->c_df = c_df;
- se->w_dfp = w_dfp;
- se->c_dfp = c_dfp;
- se->found = 0;
- se->found_len = 0;
- *pathtail = se;
- pathtail = &se->name_next;
- break;
- case 'x': /* exclude path or partition */
- se = (struct name_list *) malloc (sizeof (struct name_list));
- se->name = optarg;
- se->name_next = NULL;
+ case 'u':
+ if (units)
+ free(units);
+ if (! strcmp (optarg, "bytes")) {
+ mult = (uintmax_t)1;
+ units = strdup ("B");
+ } else if (! strcmp (optarg, "kB")) {
+ mult = (uintmax_t)1024;
+ units = strdup ("kB");
+ } else if (! strcmp (optarg, "MB")) {
+ mult = (uintmax_t)1024 * 1024;
+ units = strdup ("MB");
+ } else if (! strcmp (optarg, "GB")) {
+ mult = (uintmax_t)1024 * 1024 * 1024;
+ units = strdup ("GB");
+ } else if (! strcmp (optarg, "TB")) {
+ mult = (uintmax_t)1024 * 1024 * 1024 * 1024;
+ units = strdup ("TB");
+ } else {
+ die (STATE_UNKNOWN, _("unit type %s not known\n"), optarg);
+ }
+ if (units == NULL)
+ die (STATE_UNKNOWN, _("failed allocating storage for '%s'\n"), "units");
+ break;
+ case 'k': /* display mountpoint */
+ mult = 1024;
+ if (units)
+ free(units);
+ units = strdup ("kB");
+ break;
+ case 'm': /* display mountpoint */
+ mult = 1024 * 1024;
+ if (units)
+ free(units);
+ units = strdup ("MB");
+ break;
+ case 'l':
+ show_local_fs = 1;
+ break;
+ case 'p': /* select path */
+ se = (struct name_list *) malloc (sizeof (struct name_list));
+ se->name = optarg;
+ se->name_next = NULL;
+ se->w_df = w_df;
+ se->c_df = c_df;
+ se->w_dfp = w_dfp;
+ se->c_dfp = c_dfp;
+ se->found = 0;
+ se->found_len = 0;
+ *pathtail = se;
+ pathtail = &se->name_next;
+ break;
+ case 'x': /* exclude path or partition */
+ se = (struct name_list *) malloc (sizeof (struct name_list));
+ se->name = optarg;
+ se->name_next = NULL;
/* If you don't clear the w_fd etc values here, they
* get processed when you walk the list and assigned
se->c_df = 0;
se->w_dfp = 0;
se->c_dfp = 0;
- se->found = 0;
- se->found_len = 0;
- *dptail = se;
- dptail = &se->name_next;
- break;
- case 'X': /* exclude file system type */
- se = (struct name_list *) malloc (sizeof (struct name_list));
- se->name = optarg;
- se->name_next = NULL;
+ se->found = 0;
+ se->found_len = 0;
+ *dptail = se;
+ dptail = &se->name_next;
+ break;
+ case 'X': /* exclude file system type */
+ se = (struct name_list *) malloc (sizeof (struct name_list));
+ se->name = optarg;
+ se->name_next = NULL;
/* If you don't clear the w_fd etc values here, they
* get processed when you walk the list and assigned
* to the global w_df!
se->c_df = 0;
se->w_dfp = 0;
se->c_dfp = 0;
- se->found = 0;
- se->found_len = 0;
- *fstail = se;
- fstail = &se->name_next;
- break;
- case 'v': /* verbose */
- verbose++;
- break;
- case 'q': /* verbose */
- verbose--;
- break;
- case 'e':
- erronly = TRUE;
- break;
- case 'M': /* display mountpoint */
- display_mntp = TRUE;
- break;
- case 'C':
- w_df = 0;
- c_df = 0;
- w_dfp = -1.0;
- c_dfp = -1.0;
- break;
- case 'V': /* version */
- print_revision (progname, revision);
- exit (STATE_OK);
- case 'h': /* help */
- print_help ();
- exit (STATE_OK);
- case '?': /* help */
- usage2 (_("Unknown argument"), optarg);
- }
- }
-
- /* Support for "check_disk warn crit [fs]" with thresholds at used level */
- c = optind;
- if (w_dfp < 0 && argc > c && is_intnonneg (argv[c]))
- w_dfp = (100.0 - atof (argv[c++]));
-
- if (c_dfp < 0 && argc > c && is_intnonneg (argv[c]))
- c_dfp = (100.0 - atof (argv[c++]));
-
- if (argc > c && path == NULL) {
- se = (struct name_list *) malloc (sizeof (struct name_list));
- se->name = strdup (argv[c++]);
- se->name_next = NULL;
- se->w_df = w_df;
- se->c_df = c_df;
- se->w_dfp = w_dfp;
- se->c_dfp = c_dfp;
- se->found =0;
- se->found_len = 0;
- *pathtail = se;
- }
-
- if (path_select_list) {
- temp_list = path_select_list;
- while (temp_list) {
- if (validate_arguments (temp_list->w_df,
- temp_list->c_df,
- temp_list->w_dfp,
- temp_list->c_dfp,
- temp_list->w_idfp,
- temp_list->c_idfp,
- temp_list->name) == ERROR)
- result = ERROR;
- temp_list = temp_list->name_next;
- }
- return result;
- } else {
- return validate_arguments (w_df, c_df, w_dfp, c_dfp, w_idfp, c_idfp, NULL);
- }
+ se->found = 0;
+ se->found_len = 0;
+ *fstail = se;
+ fstail = &se->name_next;
+ break;
+ case 'v': /* verbose */
+ verbose++;
+ break;
+ case 'q': /* verbose */
+ verbose--;
+ break;
+ case 'e':
+ erronly = TRUE;
+ break;
+ case 'M': /* display mountpoint */
+ display_mntp = TRUE;
+ break;
+ case 'C':
+ w_df = 0;
+ c_df = 0;
+ w_dfp = -1.0;
+ c_dfp = -1.0;
+ break;
+ case 'V': /* version */
+ print_revision (progname, revision);
+ exit (STATE_OK);
+ case 'h': /* help */
+ print_help ();
+ exit (STATE_OK);
+ case '?': /* help */
+ usage (_("Unknown argument"));
+ }
+ }
+
+ /* Support for "check_disk warn crit [fs]" with thresholds at used level */
+ c = optind;
+ if (w_dfp < 0 && argc > c && is_intnonneg (argv[c]))
+ w_dfp = (100.0 - atof (argv[c++]));
+
+ if (c_dfp < 0 && argc > c && is_intnonneg (argv[c]))
+ c_dfp = (100.0 - atof (argv[c++]));
+
+ if (argc > c && path == NULL) {
+ se = (struct name_list *) malloc (sizeof (struct name_list));
+ se->name = strdup (argv[c++]);
+ se->name_next = NULL;
+ se->w_df = w_df;
+ se->c_df = c_df;
+ se->w_dfp = w_dfp;
+ se->c_dfp = c_dfp;
+ se->found =0;
+ se->found_len = 0;
+ *pathtail = se;
+ }
+
+ if (path_select_list) {
+ temp_list = path_select_list;
+ while (temp_list) {
+ if (validate_arguments (temp_list->w_df,
+ temp_list->c_df,
+ temp_list->w_dfp,
+ temp_list->c_dfp,
+ temp_list->w_idfp,
+ temp_list->c_idfp,
+ temp_list->name) == ERROR)
+ result = ERROR;
+ temp_list = temp_list->name_next;
+ }
+ return result;
+ } else {
+ return validate_arguments (w_df, c_df, w_dfp, c_dfp, w_idfp, c_idfp, NULL);
+ }
}
void
print_path (const char *mypath)
{
- if (mypath == NULL)
- printf ("\n");
- else
- printf (_(" for %s\n"), mypath);
+ if (mypath == NULL)
+ printf ("\n");
+ else
+ printf (_(" for %s\n"), mypath);
- return;
+ return;
}
int
validate_arguments (uintmax_t w, uintmax_t c, double wp, double cp, double iwp, double icp, char *mypath)
{
- if (w < 0 && c < 0 && wp < 0.0 && cp < 0.0) {
- printf (_("INPUT ERROR: No thresholds specified"));
- print_path (mypath);
- return ERROR;
- }
- else if ((wp >= 0.0 || cp >= 0.0) &&
- (wp < 0.0 || cp < 0.0 || wp > 100.0 || cp > 100.0 || cp > wp)) {
- printf (_("\
+ if (w < 0 && c < 0 && wp < 0.0 && cp < 0.0) {
+ printf (_("INPUT ERROR: No thresholds specified"));
+ print_path (mypath);
+ return ERROR;
+ }
+ else if ((wp >= 0.0 || cp >= 0.0) &&
+ (wp < 0.0 || cp < 0.0 || wp > 100.0 || cp > 100.0 || cp > wp)) {
+ printf (_("\
INPUT ERROR: C_DFP (%f) should be less than W_DFP (%.1f) and both should be between zero and 100 percent, inclusive"),
- cp, wp);
- print_path (mypath);
- return ERROR;
- }
- else if ((iwp >= 0.0 || icp >= 0.0) &&
- (iwp < 0.0 || icp < 0.0 || iwp > 100.0 || icp > 100.0 || icp > iwp)) {
- printf (_("\
+ cp, wp);
+ print_path (mypath);
+ return ERROR;
+ }
+ else if ((iwp >= 0.0 || icp >= 0.0) &&
+ (iwp < 0.0 || icp < 0.0 || iwp > 100.0 || icp > 100.0 || icp > iwp)) {
+ printf (_("\
INPUT ERROR: C_IDFP (%f) should be less than W_IDFP (%.1f) and both should be between zero and 100 percent, inclusive"),
- icp, iwp);
- print_path (mypath);
- return ERROR;
- }
- else if ((w > 0 || c > 0) && (w == 0 || c == 0 || c > w)) {
- printf (_("\
+ icp, iwp);
+ print_path (mypath);
+ return ERROR;
+ }
+ else if ((w > 0 || c > 0) && (w == 0 || c == 0 || c > w)) {
+ printf (_("\
INPUT ERROR: C_DF (%lu) should be less than W_DF (%lu) and both should be greater than zero"),
- (unsigned long)c, (unsigned long)w);
- print_path (mypath);
- return ERROR;
- }
-
- if (units == NULL) {
- units = strdup ("MB");
- mult = (uintmax_t)1024 * 1024;
- }
- return OK;
+ (unsigned long)c, (unsigned long)w);
+ print_path (mypath);
+ return ERROR;
+ }
+
+ if (units == NULL) {
+ units = strdup ("MB");
+ mult = (uintmax_t)1024 * 1024;
+ }
+ return OK;
}
else if (w_df > 0 && free_disk <= w_df)
result = STATE_WARNING;
else if (usp >= 0.0)
- result = STATE_OK;
- return result;
+ result = STATE_OK;
+ return result;
}
int
walk_name_list (struct name_list *list, const char *name)
{
- int name_len;
- name_len = strlen(name);
- while (list) {
- /* if the paths match up to the length of the mount path,
- * AND if the mount path name is longer than the longest
- * found match, we have a new winner */
- if (name_len >= list->found_len &&
- ! strncmp(list->name, name, name_len)) {
- list->found = 1;
- list->found_len = name_len;
- /* if required for name_lists that have not saved w_df, etc (eg exclude lists) */
- if (list->w_df) w_df = list->w_df;
- if (list->c_df) c_df = list->c_df;
- if (list->w_dfp>=0.0) w_dfp = list->w_dfp;
- if (list->c_dfp>=0.0) c_dfp = list->c_dfp;
- return TRUE;
- }
- list = list->name_next;
- }
- return FALSE;
+ int name_len;
+ name_len = strlen(name);
+ while (list) {
+ /* if the paths match up to the length of the mount path,
+ * AND if the mount path name is longer than the longest
+ * found match, we have a new winner */
+ if (name_len >= list->found_len &&
+ ! strncmp(list->name, name, name_len)) {
+ list->found = 1;
+ list->found_len = name_len;
+ /* if required for name_lists that have not saved w_df, etc (eg exclude lists) */
+ if (list->w_df) w_df = list->w_df;
+ if (list->c_df) c_df = list->c_df;
+ if (list->w_dfp>=0.0) w_dfp = list->w_dfp;
+ if (list->c_dfp>=0.0) c_dfp = list->c_dfp;
+ return TRUE;
+ }
+ list = list->name_next;
+ }
+ return FALSE;
}
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 checks the amount of used disk space on a mounted file system\n\
-and generates an alert if free space is less than one of the threshold values.\n\n"));
-
- print_usage ();
-
- printf (_(UT_HELP_VRSN));
-
- printf (_("\
- -w, --warning=INTEGER\n\
- Exit with WARNING status if less than INTEGER --units of disk are free\n\
- -w, --warning=PERCENT%%\n\
- Exit with WARNING status if less than PERCENT of disk space is free\n\
- -W, --iwarning=PERCENT%%\n\
- Exit with WARNING status if less than PERCENT of inode space is free\n\
- -K, --icritical=PERCENT%%\n\
- Exit with CRITICAL status if less than PERCENT of inode space is free\n\
- -c, --critical=INTEGER\n\
- Exit with CRITICAL status if less than INTEGER --units of disk are free\n\
- -c, --critical=PERCENT%%\n\
- Exit with CRITCAL status if less than PERCENT of disk space is free\n\
- -C, --clear\n\
- Clear thresholds\n"));
-
- printf (_("\
- -u, --units=STRING\n\
- Choose bytes, kB, MB, GB, TB (default: MB)\n\
- -k, --kilobytes\n\
- Same as '--units kB'\n\
- -m, --megabytes\n\
- Same as '--units MB'\n"));
-
- printf (_("\
- -l, --local\n\
- Only check local filesystems\n\
- -p, --path=PATH, --partition=PARTITION\n\
- Path or partition (may be repeated)\n\
- -x, --exclude_device=PATH <STRING>\n\
- Ignore device (only works if -p unspecified)\n\
- -X, --exclude-type=TYPE <STRING>\n\
- Ignore all filesystems of indicated type (may be repeated)\n\
- -M, --mountpoint\n\
- Display the mountpoint instead of the partition\n\
- -e, --errors-only\n\
- Display only devices/mountpoints with errors\n"));
-
- printf (_(UT_WARN_CRIT));
-
- printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT);
-
- printf (_(UT_VERBOSE));
-
- printf ("%s", _("Examples:\n\
- check_disk -w 10% -c 5% -p /tmp -p /var -C -w 100000 -c 50000 -p /\n\
- Checks /tmp and /var at 10%,5% and / at 100MB, 50MB\n"));
-
- printf (_(UT_SUPPORT));
+ print_revision (progname, revision);
+
+ printf ("Copyright (c) 1999 Ethan Galstad <nagios@nagios.org>\n");
+ printf (COPYRIGHT, copyright, email);
+
+ printf (_("This plugin checks the amount of used disk space on a mounted file system"));
+ printf (_("and generates an alert if free space is less than one of the threshold values"));
+
+ printf ("\n\n");
+
+ print_usage ();
+
+ printf (_(UT_HELP_VRSN));
+
+ printf (" -w, --warning=INTEGER");
+
+ printf ("\n");
+
+ printf (_("exit with WARNING status if less than INTEGER units of disk are free"));
+
+ printf (" -w, --warning=PERCENT%%");
+
+ printf ("\n");
+
+ printf (_("exit with WARNING status if less than PERCENT of disk space is free"));
+
+ printf ("\n");
+
+ printf (" -W, --iwarning=PERCENT%%");
+
+ printf ("\n");
+
+ printf (_("exit with WARNING status if less than PERCENT of inode space is free"));
+
+ printf ("\n");
+
+ printf (" -K, --icritical=PERCENT%%");
+
+ printf ("\n");
+
+ printf (_("exit with CRITICAL status if less than PERCENT of inode space is free"));
+
+ printf ("\n");
+
+ printf (" -c, --critical=INTEGER");
+
+ printf ("\n");
+
+ printf (_("exit with CRITICAL status if less than INTEGER --units of disk are free"));
+
+ printf ("\n");
+
+ printf (" -c, --critical=PERCENT%%");
+
+ printf ("\n");
+
+ printf (_("exit with CRITCAL status if less than PERCENT of disk space is free"));
+
+ printf ("\n");
+
+ printf (" -C, --clear");
+
+ printf ("\n");
+
+ printf (_("clear thresholds"));
+
+ printf ("\n");
+
+ printf (" -u, --units=STRING");
+
+ printf ("\n");
+
+ printf (_("choose bytes, kB, MB, GB, TB (default: MB)"));
+
+ printf ("\n");
+
+ printf (" -k, --kilobytes");
+
+ printf ("\n");
+
+ printf (_("same as '--units kB'"));
+
+ printf ("\n");
+
+ printf (" -m, --megabytes");
+
+ printf ("\n");
+
+ printf (_("same as '--units MB'\n"));
+
+ printf (" -l, --local");
+
+ printf ("\n");
+
+ printf (_("only check local filesystems"));
+
+ printf ("\n");
+
+ printf (" -p, --path=PATH, --partition=PARTITION");
+
+ printf ("\n");
+
+ printf (_("path or partition (may be repeated)"));
+
+ printf ("\n");
+
+ printf (" -x, --exclude_device=PATH <STRING>");
+
+ printf ("\n");
+
+ printf (_("ignore device (only works if -p unspecified)"));
+
+ printf ("\n");
+
+ printf (" -X, --exclude-type=TYPE <STRING>");
+
+ printf ("\n");
+
+ printf (_("ignore all filesystems of indicated type (may be repeated)"));
+
+ printf ("\n");
+
+ printf ("-m, --mountpoint");
+
+ printf ("\n");
+
+ printf (_("display the mountpoint instead of the partition"));
+
+ printf ("\n");
+
+ printf ("-e, --errors-only");
+
+ printf ("\n");
+
+ printf (_("display only devices/mountpoints with errors"));
+
+ printf ("\n");
+
+ printf (_(UT_WARN_CRIT));
+
+ printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT);
+
+ printf (_(UT_VERBOSE));
+
+ printf (_("examples:"));
+
+ printf ("\n");
+
+ printf ("check_disk -w 10% -c 5% -p /tmp -p /var -C -w 100000 -c 50000 -p /");
+
+ printf ("\n");
+
+ printf (_("checks /tmp and /var at 10% and 5% and / at 100MB, 50MB"));
+
+ printf ("\n");
+
+ printf (_(UT_SUPPORT));
}
@@ -752,7 +847,7 @@ and generates an alert if free space is less than one of the threshold values.\n
void
print_usage (void)
{
- printf ("\
-Usage: %s -w limit -c limit [-p path | -x device] [-t timeout] [-m] [-e] [-W limit] [-K limit]\n\
- [-v] [-q]\n", progname);
+ printf (_("Usage:"));
+ printf (" %s -w limit -c limit [-p path | -x device] [-t timeout]", progname);
+ printf ("[-m] [-e] [-W limit] [-K limit] [-v] [-q]\n");
}
diff --git a/plugins/check_dns.c b/plugins/check_dns.c
index d6e8ca29d51d9fd5cfd1cb944ee6ac68f8267101..faa1e150721fa3d0d3d5e272a41d185473aaea03 100644 (file)
--- a/plugins/check_dns.c
+++ b/plugins/check_dns.c
const char *progname = "check_dns";
const char *revision = "$Revision$";
-const char *copyright = "2000-2004";
+const char *copyright = "2000-2005";
const char *email = "nagiosplug-devel@lists.sourceforge.net";
#include "common.h"
int
main (int argc, char **argv)
{
- char *command_line = NULL;
- char input_buffer[MAX_INPUT_BUFFER];
- char *address = NULL;
- char *msg = NULL;
- char *temp_buffer = NULL;
- int non_authoritative = FALSE;
- int result = STATE_UNKNOWN;
- double elapsed_time;
- long microsec;
- struct timeval tv;
- int multi_address;
- int parse_address = FALSE; /* This flag scans for Address: but only after Name: */
- output chld_out, chld_err;
- size_t i;
-
- setlocale (LC_ALL, "");
- bindtextdomain (PACKAGE, LOCALEDIR);
- textdomain (PACKAGE);
-
- /* Set signal handling and alarm */
- if (signal (SIGALRM, popen_timeout_alarm_handler) == SIG_ERR) {
- usage_va(_("Cannot catch SIGALRM"));
- }
-
- if (process_arguments (argc, argv) == ERROR) {
- usage_va(_("Could not parse arguments"));
- }
-
- /* get the command to run */
- asprintf (&command_line, "%s %s %s", NSLOOKUP_COMMAND, query_address, dns_server);
-
- alarm (timeout_interval);
- gettimeofday (&tv, NULL);
-
- if (verbose)
- printf ("%s\n", command_line);
-
- /* run the command */
- if((np_runcmd(command_line, &chld_out, &chld_err, 0)) != 0) {
- msg = (char *)_("nslookup returned error status");
- result = STATE_WARNING;
- }
-
- /* scan stdout */
- for(i = 0; i < chld_out.lines; i++) {
- if (verbose)
- puts(chld_out.line[i]);
-
- if (strstr (chld_out.line[i], ".in-addr.arpa")) {
- if ((temp_buffer = strstr (chld_out.line[i], "name = ")))
- address = strdup (temp_buffer + 7);
- else {
- msg = (char *)_("Warning plugin error");
- result = STATE_WARNING;
- }
- }
-
- /* the server is responding, we just got the host name... */
- if (strstr (chld_out.line[i], "Name:"))
- parse_address = TRUE;
- else if (parse_address == TRUE && (strstr (chld_out.line[i], "Address:") ||
- strstr (chld_out.line[i], "Addresses:"))) {
- temp_buffer = index (chld_out.line[i], ':');
- temp_buffer++;
-
- /* Strip leading spaces */
- for (; *temp_buffer != '\0' && *temp_buffer == ' '; temp_buffer++)
- /* NOOP */;
-
- strip(temp_buffer);
- if (temp_buffer==NULL || strlen(temp_buffer)==0) {
- die (STATE_CRITICAL,
- _("DNS CRITICAL - '%s' returned empty host name string\n"),
- NSLOOKUP_COMMAND);
- }
-
- if (address == NULL)
- address = strdup (temp_buffer);
- else
- asprintf(&address, "%s,%s", address, temp_buffer);
- }
-
- else if (strstr (chld_out.line[i], _("Non-authoritative answer:"))) {
- non_authoritative = TRUE;
- }
-
- result = error_scan (chld_out.line[i]);
- if (result != STATE_OK) {
- msg = strchr (chld_out.line[i], ':');
- if(msg) msg++;
- break;
- }
- }
-
- /* scan stderr */
- for(i = 0; i < chld_err.lines; i++) {
- if (verbose)
- puts(chld_err.line[i]);
-
- if (error_scan (chld_err.line[i]) != STATE_OK) {
- result = max_state (result, error_scan (chld_err.line[i]));
- msg = strchr(input_buffer, ':');
- if(msg) msg++;
- }
- }
-
- /* If we got here, we should have an address string,
- * and we can segfault if we do not */
- if (address==NULL || strlen(address)==0)
- die (STATE_CRITICAL,
- _("DNS CRITICAL - '%s' msg parsing exited with no address\n"),
- NSLOOKUP_COMMAND);
-
- /* compare to expected address */
- if (result == STATE_OK && match_expected_address && strcmp(address, expected_address)) {
- result = STATE_CRITICAL;
- asprintf(&msg, _("expected %s but got %s"), expected_address, address);
- }
-
- /* check if authoritative */
- if (result == STATE_OK && expect_authority && non_authoritative) {
- result = STATE_CRITICAL;
- asprintf(&msg, _("server %s is not authoritative for %s"), dns_server, query_address);
- }
-
- microsec = deltime (tv);
- elapsed_time = (double)microsec / 1.0e6;
-
- if (result == STATE_OK) {
- if (strchr (address, ',') == NULL)
- multi_address = FALSE;
- else
- multi_address = TRUE;
-
- printf ("DNS %s: ", _("OK"));
- printf (ngettext("%.3f second response time", "%.3f seconds response time", elapsed_time), elapsed_time);
- printf (_(". %s returns %s"), query_address, address);
- printf ("|%s\n", fperfdata ("time", elapsed_time, "s", FALSE, 0, FALSE, 0, TRUE, 0, FALSE, 0));
- }
- else if (result == STATE_WARNING)
- printf (_("DNS WARNING - %s\n"),
- !strcmp (msg, "") ? _(" Probably a non-existent host/domain") : msg);
- else if (result == STATE_CRITICAL)
- printf (_("DNS CRITICAL - %s\n"),
- !strcmp (msg, "") ? _(" Probably a non-existent host/domain") : msg);
- else
- printf (_("DNS UNKNOW - %s\n"),
- !strcmp (msg, "") ? _(" Probably a non-existent host/domain") : msg);
-
- return result;
+ char *command_line = NULL;
+ char input_buffer[MAX_INPUT_BUFFER];
+ char *address = NULL;
+ char *msg = NULL;
+ char *temp_buffer = NULL;
+ int non_authoritative = FALSE;
+ int result = STATE_UNKNOWN;
+ double elapsed_time;
+ long microsec;
+ struct timeval tv;
+ int multi_address;
+ int parse_address = FALSE; /* This flag scans for Address: but only after Name: */
+ output chld_out, chld_err;
+ size_t i;
+
+ setlocale (LC_ALL, "");
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
+ /* Set signal handling and alarm */
+ if (signal (SIGALRM, popen_timeout_alarm_handler) == SIG_ERR) {
+ usage_va(_("Cannot catch SIGALRM"));
+ }
+
+ if (process_arguments (argc, argv) == ERROR) {
+ usage_va(_("Could not parse arguments"));
+ }
+
+ /* get the command to run */
+ asprintf (&command_line, "%s %s %s", NSLOOKUP_COMMAND, query_address, dns_server);
+
+ alarm (timeout_interval);
+ gettimeofday (&tv, NULL);
+
+ if (verbose)
+ printf ("%s\n", command_line);
+
+ /* run the command */
+ if((np_runcmd(command_line, &chld_out, &chld_err, 0)) != 0) {
+ msg = (char *)_("nslookup returned an error status");
+ result = STATE_WARNING;
+ }
+
+ /* scan stdout */
+ for(i = 0; i < chld_out.lines; i++) {
+ if (verbose)
+ puts(chld_out.line[i]);
+
+ if (strstr (chld_out.line[i], ".in-addr.arpa")) {
+ if ((temp_buffer = strstr (chld_out.line[i], "name = ")))
+ address = strdup (temp_buffer + 7);
+ else {
+ msg = (char *)_("Warning plugin error");
+ result = STATE_WARNING;
+ }
+ }
+
+ /* the server is responding, we just got the host name... */
+ if (strstr (chld_out.line[i], "Name:"))
+ parse_address = TRUE;
+ else if (parse_address == TRUE && (strstr (chld_out.line[i], "Address:") ||
+ strstr (chld_out.line[i], "Addresses:"))) {
+ temp_buffer = index (chld_out.line[i], ':');
+ temp_buffer++;
+
+ /* Strip leading spaces */
+ for (; *temp_buffer != '\0' && *temp_buffer == ' '; temp_buffer++)
+ /* NOOP */;
+
+ strip(temp_buffer);
+ if (temp_buffer==NULL || strlen(temp_buffer)==0) {
+ die (STATE_CRITICAL,
+ _("DNS CRITICAL - '%s' returned empty host name string\n"),
+ NSLOOKUP_COMMAND);
+ }
+
+ if (address == NULL)
+ address = strdup (temp_buffer);
+ else
+ asprintf(&address, "%s,%s", address, temp_buffer);
+ }
+
+ else if (strstr (chld_out.line[i], _("Non-authoritative answer:"))) {
+ non_authoritative = TRUE;
+ }
+
+ result = error_scan (chld_out.line[i]);
+ if (result != STATE_OK) {
+ msg = strchr (chld_out.line[i], ':');
+ if(msg) msg++;
+ break;
+ }
+ }
+
+ /* scan stderr */
+ for(i = 0; i < chld_err.lines; i++) {
+ if (verbose)
+ puts(chld_err.line[i]);
+
+ if (error_scan (chld_err.line[i]) != STATE_OK) {
+ result = max_state (result, error_scan (chld_err.line[i]));
+ msg = strchr(input_buffer, ':');
+ if(msg) msg++;
+ }
+ }
+
+ /* If we got here, we should have an address string,
+ * and we can segfault if we do not */
+ if (address==NULL || strlen(address)==0)
+ die (STATE_CRITICAL,
+ _("DNS CRITICAL - '%s' msg parsing exited with no address\n"),
+ NSLOOKUP_COMMAND);
+
+ /* compare to expected address */
+ if (result == STATE_OK && match_expected_address && strcmp(address, expected_address)) {
+ result = STATE_CRITICAL;
+ asprintf(&msg, _("expected %s but got %s"), expected_address, address);
+ }
+
+ /* check if authoritative */
+ if (result == STATE_OK && expect_authority && non_authoritative) {
+ result = STATE_CRITICAL;
+ asprintf(&msg, _("server %s is not authoritative for %s"), dns_server, query_address);
+ }
+
+ microsec = deltime (tv);
+ elapsed_time = (double)microsec / 1.0e6;
+
+ if (result == STATE_OK) {
+ if (strchr (address, ',') == NULL)
+ multi_address = FALSE;
+ else
+ multi_address = TRUE;
+
+ printf ("DNS %s: ", _("OK"));
+ printf (ngettext("%.3f second response time", "%.3f seconds response time", elapsed_time), elapsed_time);
+ printf (_(". %s returns %s"), query_address, address);
+ printf ("|%s\n", fperfdata ("time", elapsed_time, "s", FALSE, 0, FALSE, 0, TRUE, 0, FALSE, 0));
+ }
+ else if (result == STATE_WARNING)
+ printf (_("DNS WARNING - %s\n"),
+ !strcmp (msg, "") ? _(" Probably a non-existent host/domain") : msg);
+ else if (result == STATE_CRITICAL)
+ printf (_("DNS CRITICAL - %s\n"),
+ !strcmp (msg, "") ? _(" Probably a non-existent host/domain") : msg);
+ else
+ printf (_("DNS UNKNOW - %s\n"),
+ !strcmp (msg, "") ? _(" Probably a non-existent host/domain") : msg);
+
+ return result;
}
error_scan (char *input_buffer)
{
- /* the DNS lookup timed out */
- if (strstr (input_buffer, _("Note: nslookup is deprecated and may be removed from future releases.")) ||
- strstr (input_buffer, _("Consider using the `dig' or `host' programs instead. Run nslookup with")) ||
- strstr (input_buffer, _("the `-sil[ent]' option to prevent this message from appearing.")))
- return STATE_OK;
-
- /* DNS server is not running... */
- else if (strstr (input_buffer, "No response from server"))
- die (STATE_CRITICAL, _("No response from DNS %s\n"), dns_server);
-
- /* Host name is valid, but server doesn't have records... */
- else if (strstr (input_buffer, "No records"))
- die (STATE_CRITICAL, _("DNS %s has no records\n"), dns_server);
-
- /* Connection was refused */
- else if (strstr (input_buffer, "Connection refused") ||
- strstr (input_buffer, "Couldn't find server") ||
- strstr (input_buffer, "Refused") ||
- (strstr (input_buffer, "** server can't find") &&
- strstr (input_buffer, ": REFUSED")))
- die (STATE_CRITICAL, _("Connection to DNS %s was refused\n"), dns_server);
-
- /* Query refused (usually by an ACL in the namserver) */
- else if (strstr (input_buffer, "Query refused"))
- die (STATE_CRITICAL, _("Query was refused by DNS server at %s\n"), dns_server);
-
- /* No information (e.g. nameserver IP has two PTR records) */
- else if (strstr (input_buffer, "No information"))
- die (STATE_CRITICAL, _("No information returned by DNS server at %s\n"), dns_server);
-
- /* Host or domain name does not exist */
- else if (strstr (input_buffer, "Non-existent") ||
- strstr (input_buffer, "** server can't find") ||
- strstr (input_buffer,"NXDOMAIN"))
- die (STATE_CRITICAL, _("Domain %s was not found by the server\n"), query_address);
-
- /* Network is unreachable */
- else if (strstr (input_buffer, "Network is unreachable"))
- die (STATE_CRITICAL, _("Network is unreachable\n"));
-
- /* Internal server failure */
- else if (strstr (input_buffer, "Server failure"))
- die (STATE_CRITICAL, _("DNS failure for %s\n"), dns_server);
-
- /* Request error or the DNS lookup timed out */
- else if (strstr (input_buffer, "Format error") ||
- strstr (input_buffer, "Timed out"))
- return STATE_WARNING;
-
- return STATE_OK;
+ /* the DNS lookup timed out */
+ if (strstr (input_buffer, _("Note: nslookup is deprecated and may be removed from future releases.")) ||
+ strstr (input_buffer, _("Consider using the `dig' or `host' programs instead. Run nslookup with")) ||
+ strstr (input_buffer, _("the `-sil[ent]' option to prevent this message from appearing.")))
+ return STATE_OK;
+
+ /* DNS server is not running... */
+ else if (strstr (input_buffer, "No response from server"))
+ die (STATE_CRITICAL, _("No response from DNS %s\n"), dns_server);
+
+ /* Host name is valid, but server doesn't have records... */
+ else if (strstr (input_buffer, "No records"))
+ die (STATE_CRITICAL, _("DNS %s has no records\n"), dns_server);
+
+ /* Connection was refused */
+ else if (strstr (input_buffer, "Connection refused") ||
+ strstr (input_buffer, "Couldn't find server") ||
+ strstr (input_buffer, "Refused") ||
+ (strstr (input_buffer, "** server can't find") &&
+ strstr (input_buffer, ": REFUSED")))
+ die (STATE_CRITICAL, _("Connection to DNS %s was refused\n"), dns_server);
+
+ /* Query refused (usually by an ACL in the namserver) */
+ else if (strstr (input_buffer, "Query refused"))
+ die (STATE_CRITICAL, _("Query was refused by DNS server at %s\n"), dns_server);
+
+ /* No information (e.g. nameserver IP has two PTR records) */
+ else if (strstr (input_buffer, "No information"))
+ die (STATE_CRITICAL, _("No information returned by DNS server at %s\n"), dns_server);
+
+ /* Host or domain name does not exist */
+ else if (strstr (input_buffer, "Non-existent") ||
+ strstr (input_buffer, "** server can't find") ||
+ strstr (input_buffer,"NXDOMAIN"))
+ die (STATE_CRITICAL, _("Domain %s was not found by the server\n"), query_address);
+
+ /* Network is unreachable */
+ else if (strstr (input_buffer, "Network is unreachable"))
+ die (STATE_CRITICAL, _("Network is unreachable\n"));
+
+ /* Internal server failure */
+ else if (strstr (input_buffer, "Server failure"))
+ die (STATE_CRITICAL, _("DNS failure for %s\n"), dns_server);
+
+ /* Request error or the DNS lookup timed out */
+ else if (strstr (input_buffer, "Format error") ||
+ strstr (input_buffer, "Timed out"))
+ return STATE_WARNING;
+
+ return STATE_OK;
}
int
process_arguments (int argc, char **argv)
{
- int c;
-
- int opt_index = 0;
- static struct option long_opts[] = {
- {"help", no_argument, 0, 'h'},
- {"version", no_argument, 0, 'V'},
- {"verbose", no_argument, 0, 'v'},
- {"timeout", required_argument, 0, 't'},
- {"hostname", required_argument, 0, 'H'},
- {"server", required_argument, 0, 's'},
- {"reverse-server", required_argument, 0, 'r'},
- {"expected-address", required_argument, 0, 'a'},
- {"expect-authority", no_argument, 0, 'A'},
- {0, 0, 0, 0}
- };
-
- if (argc < 2)
- return ERROR;
-
- for (c = 1; c < argc; c++)
- if (strcmp ("-to", argv[c]) == 0)
- strcpy (argv[c], "-t");
-
- while (1) {
- c = getopt_long (argc, argv, "hVvAt:H:s:r:a:", long_opts, &opt_index);
-
- if (c == -1 || c == EOF)
- break;
-
- switch (c) {
- case 'h': /* help */
- print_help ();
- exit (STATE_OK);
- case 'V': /* version */
- print_revision (progname, revision);
- exit (STATE_OK);
- case 'v': /* version */
- verbose = TRUE;
- break;
- case 't': /* timeout period */
- timeout_interval = atoi (optarg);
- break;
- case 'H': /* hostname */
- if (strlen (optarg) >= ADDRESS_LENGTH)
- die (STATE_UNKNOWN, _("Input buffer overflow\n"));
- strcpy (query_address, optarg);
- break;
- case 's': /* server name */
- /* TODO: this host_or_die check is probably unnecessary.
- * Better to confirm nslookup response matches */
- host_or_die(optarg);
- if (strlen (optarg) >= ADDRESS_LENGTH)
- die (STATE_UNKNOWN, _("Input buffer overflow\n"));
- strcpy (dns_server, optarg);
- break;
- case 'r': /* reverse server name */
- /* TODO: Is this host_or_die necessary? */
- host_or_die(optarg);
- if (strlen (optarg) >= ADDRESS_LENGTH)
- die (STATE_UNKNOWN, _("Input buffer overflow\n"));
- strcpy (ptr_server, optarg);
- break;
- case 'a': /* expected address */
- if (strlen (optarg) >= ADDRESS_LENGTH)
- die (STATE_UNKNOWN, _("Input buffer overflow\n"));
- strcpy (expected_address, optarg);
- match_expected_address = TRUE;
- break;
- case 'A': /* expect authority */
- expect_authority = TRUE;
- break;
- default: /* args not parsable */
- usage_va(_("Unknown argument - %s"), optarg);
- }
- }
-
- c = optind;
- if (strlen(query_address)==0 && c<argc) {
- if (strlen(argv[c])>=ADDRESS_LENGTH)
- die (STATE_UNKNOWN, _("Input buffer overflow\n"));
- strcpy (query_address, argv[c++]);
- }
-
- if (strlen(dns_server)==0 && c<argc) {
- /* TODO: See -s option */
- host_or_die(argv[c]);
- if (strlen(argv[c]) >= ADDRESS_LENGTH)
- die (STATE_UNKNOWN, _("Input buffer overflow\n"));
- strcpy (dns_server, argv[c++]);
- }
-
- return validate_arguments ();
+ int c;
+
+ int opt_index = 0;
+ static struct option long_opts[] = {
+ {"help", no_argument, 0, 'h'},
+ {"version", no_argument, 0, 'V'},
+ {"verbose", no_argument, 0, 'v'},
+ {"timeout", required_argument, 0, 't'},
+ {"hostname", required_argument, 0, 'H'},
+ {"server", required_argument, 0, 's'},
+ {"reverse-server", required_argument, 0, 'r'},
+ {"expected-address", required_argument, 0, 'a'},
+ {"expect-authority", no_argument, 0, 'A'},
+ {0, 0, 0, 0}
+ };
+
+ if (argc < 2)
+ return ERROR;
+
+ for (c = 1; c < argc; c++)
+ if (strcmp ("-to", argv[c]) == 0)
+ strcpy (argv[c], "-t");
+
+ while (1) {
+ c = getopt_long (argc, argv, "hVvAt:H:s:r:a:", long_opts, &opt_index);
+
+ if (c == -1 || c == EOF)
+ break;
+
+ switch (c) {
+ case 'h': /* help */
+ print_help ();
+ exit (STATE_OK);
+ case 'V': /* version */
+ print_revision (progname, revision);
+ exit (STATE_OK);
+ case 'v': /* version */
+ verbose = TRUE;
+ break;
+ case 't': /* timeout period */
+ timeout_interval = atoi (optarg);
+ break;
+ case 'H': /* hostname */
+ if (strlen (optarg) >= ADDRESS_LENGTH)
+ die (STATE_UNKNOWN, _("Input buffer overflow\n"));
+ strcpy (query_address, optarg);
+ break;
+ case 's': /* server name */
+ /* TODO: this host_or_die check is probably unnecessary.
+ * Better to confirm nslookup response matches */
+ host_or_die(optarg);
+ if (strlen (optarg) >= ADDRESS_LENGTH)
+ die (STATE_UNKNOWN, _("Input buffer overflow\n"));
+ strcpy (dns_server, optarg);
+ break;
+ case 'r': /* reverse server name */
+ /* TODO: Is this host_or_die necessary? */
+ host_or_die(optarg);
+ if (strlen (optarg) >= ADDRESS_LENGTH)
+ die (STATE_UNKNOWN, _("Input buffer overflow\n"));
+ strcpy (ptr_server, optarg);
+ break;
+ case 'a': /* expected address */
+ if (strlen (optarg) >= ADDRESS_LENGTH)
+ die (STATE_UNKNOWN, _("Input buffer overflow\n"));
+ strcpy (expected_address, optarg);
+ match_expected_address = TRUE;
+ break;
+ case 'A': /* expect authority */
+ expect_authority = TRUE;
+ break;
+ default: /* args not parsable */
+ usage_va(_("Unknown argument - %s"), optarg);
+ }
+ }
+
+ c = optind;
+ if (strlen(query_address)==0 && c<argc) {
+ if (strlen(argv[c])>=ADDRESS_LENGTH)
+ die (STATE_UNKNOWN, _("Input buffer overflow\n"));
+ strcpy (query_address, argv[c++]);
+ }
+
+ if (strlen(dns_server)==0 && c<argc) {
+ /* TODO: See -s option */
+ host_or_die(argv[c]);
+ if (strlen(argv[c]) >= ADDRESS_LENGTH)
+ die (STATE_UNKNOWN, _("Input buffer overflow\n"));
+ strcpy (dns_server, argv[c++]);
+ }
+
+ return validate_arguments ();
}
int
validate_arguments ()
{
- if (query_address[0] == 0)
- return ERROR;
+ if (query_address[0] == 0)
+ return ERROR;
- return OK;
+ return OK;
}
void
print_help (void)
{
- print_revision (progname, revision);
+ print_revision (progname, revision);
- printf ("Copyright (c) 1999 Ethan Galstad <nagios@nagios.org>\n");
- printf (COPYRIGHT, copyright, email);
+ printf ("Copyright (c) 1999 Ethan Galstad <nagios@nagios.org>\n");
+ printf (COPYRIGHT, copyright, email);
- printf (_("\
-This plugin uses the nslookup program to obtain the IP address\n\
-for the given host/domain query. A optional DNS server to use may\n\
-be specified. If no DNS server is specified, the default server(s)\n\
-specified in /etc/resolv.conf will be used.\n\n"));
+ printf (_("This plugin uses the nslookup program to obtain the IP address for the given host/domain query."));
+
+ printf ("\n");
+
+ printf (_("An optional DNS server to use may be specified."));
+
+ printf ("\n");
- print_usage ();
+ printf (_("If no DNS server is specified, the default server(s)specified in /etc/resolv.conf will be used."));
- printf (_(UT_HELP_VRSN));
+ printf ("\n\n");
- printf (_("\
--H, --hostname=HOST\n\
- The name or address you want to query\n\
--s, --server=HOST\n\
- Optional DNS server you want to use for the lookup\n\
--a, --expected-address=IP-ADDRESS\n\
- Optional IP address you expect the DNS server to return\n\
--A, --expect-authority\n\
- Optionally expect the DNS server to be authoritative for the lookup\n"));
+ print_usage ();
- printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT);
+ printf (_(UT_HELP_VRSN));
- printf (_(UT_SUPPORT));
+ printf (" -H, --hostname=HOST");
+
+ printf ("\n");
+
+ printf (_("the name or address you want to query"));
+
+ printf ("\n");
+
+ printf (" -s, --server=HOST");
+
+ printf ("\n");
+
+ printf (_("optional DNS server you want to use for the lookup"));
+
+ printf ("\n");
+
+ printf (" -a, --expected-address=IP-ADDRESS");
+
+ printf ("\n");
+
+ printf (_("optional IP address you expect the DNS server to return"));
+
+ printf ("\n");
+
+ printf (" -A, --expect-authority");
+
+ printf ("\n");
+
+ printf (_("optionally expect the DNS server to be authoritative for the lookup"));
+
+ printf ("\n");
+
+ printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT);
+
+ printf (_(UT_SUPPORT));
}
void
print_usage (void)
{
- printf ("\
-Usage: %s -H host [-s server] [-a expected-address] [-A] [-t timeout]\n", progname);
+ printf (_("Usage:"));
+
+ printf ("%s -H host [-s server] [-a expected-address] [-A] [-t timeout]\n", progname);
}
diff --git a/plugins/check_dummy.c b/plugins/check_dummy.c
index 0892611508fe05ff5ed9bac779b8f7d9a367c476..0a7f472cb8c2c834c85e85f1a359ed4d9f4f2261 100644 (file)
--- a/plugins/check_dummy.c
+++ b/plugins/check_dummy.c
const char *progname = "check_dummy";
const char *revision = "$Revision$";
-const char *copyright = "1999-2004";
+const char *copyright = "1999-2005";
const char *email = "nagiosplug-devel@lists.sourceforge.net";
#include "common.h"
int
main (int argc, char **argv)
{
- int result = STATE_UNKNOWN;
-
- setlocale (LC_ALL, "");
- bindtextdomain (PACKAGE, LOCALEDIR);
- textdomain (PACKAGE);
-
- if (argc < 2)
- usage4 (_("Could not parse arguments"));
- else if (strcmp (argv[1], "-V") == 0 || strcmp (argv[1], "--version") == 0) {
- print_revision (progname, revision);
- exit (STATE_OK);
- }
- else if (strcmp (argv[1], "-h") == 0 || strcmp (argv[1], "--help") == 0) {
- print_help ();
- exit (STATE_OK);
- }
- else if (!is_integer (argv[1]))
- usage4 (_("Arguments to check_dummy must be an integer"));
- else
- result = atoi (argv[1]);
-
- switch (result) {
- case STATE_OK:
- printf (_("OK"));
- break;
- case STATE_WARNING:
- printf (_("WARNING"));
- break;
- case STATE_CRITICAL:
- printf (_("CRITICAL"));
- break;
- case STATE_UNKNOWN:
- printf (_("UNKNOWN"));
- break;
- default:
- printf (_("Status %d is not a supported error state\n"), result);
- break;
- }
-
- if (argc >= 3)
- printf (": %s", argv[2]);
-
- printf("\n");
-
- return result;
+ int result = STATE_UNKNOWN;
+
+ setlocale (LC_ALL, "");
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
+ if (argc < 2)
+ usage4 (_("Could not parse arguments"));
+ else if (strcmp (argv[1], "-V") == 0 || strcmp (argv[1], "--version") == 0) {
+ print_revision (progname, revision);
+ exit (STATE_OK);
+ }
+ else if (strcmp (argv[1], "-h") == 0 || strcmp (argv[1], "--help") == 0) {
+ print_help ();
+ exit (STATE_OK);
+ }
+ else if (!is_integer (argv[1]))
+ usage4 (_("Arguments to check_dummy must be an integer"));
+ else
+ result = atoi (argv[1]);
+
+ switch (result) {
+ case STATE_OK:
+ printf (_("OK"));
+ break;
+ case STATE_WARNING:
+ printf (_("WARNING"));
+ break;
+ case STATE_CRITICAL:
+ printf (_("CRITICAL"));
+ break;
+ case STATE_UNKNOWN:
+ printf (_("UNKNOWN"));
+ break;
+ default:
+ printf (_("Status %d is not a supported error state\n"), result);
+ break;
+ }
+
+ if (argc >= 3)
+ printf (": %s", argv[2]);
+
+ printf("\n");
+
+ return result;
}
void
print_help (void)
{
- print_revision (progname, revision);
+ print_revision (progname, revision);
- printf ("Copyright (c) 1999 Ethan Galstad <nagios@nagios.org>\n");
- printf (COPYRIGHT, copyright, email);
+ printf ("Copyright (c) 1999 Ethan Galstad <nagios@nagios.org>\n");
+ printf (COPYRIGHT, copyright, email);
- printf (_("\
-This plugin will simply return the state corresponding to the numeric value\n\
-of the <state> argument with optional text.\n\n"));
+ printf (_("This plugin will simply return the state corresponding to the numeric value"));
+
+ printf ("\n");
+
+ printf (_("of the <state> argument with optional text"));
- print_usage ();
+ printf ("\n\n");
+
+ print_usage ();
- printf (_(UT_HELP_VRSN));
+ printf (_(UT_HELP_VRSN));
- printf (_(UT_SUPPORT));
+ printf (_(UT_SUPPORT));
}
void
print_usage (void)
{
- printf ("Usage: %s <integer state> [optional text]\n", progname);
+ printf (_("Usage:"));
+ printf (" %s <integer state> [optional text]\n", progname);
}
diff --git a/plugins/check_fping.c b/plugins/check_fping.c
index 5ffcd16e35ed3a02bcc9fafd61b7b0774720ba33..49615d13b9b0719350ea2ec18c29afc63377a634 100644 (file)
--- a/plugins/check_fping.c
+++ b/plugins/check_fping.c
#include "utils.h"
enum {
- PACKET_COUNT = 1,
- PACKET_SIZE = 56,
- PL = 0,
- RTA = 1
+ PACKET_COUNT = 1,
+ PACKET_SIZE = 56,
+ PL = 0,
+ RTA = 1
};
int textscan (char *buf);
int
main (int argc, char **argv)
{
-/* normaly should be int result = STATE_UNKNOWN; */
-
- int status = STATE_UNKNOWN;
- char *server = NULL;
- char *command_line = NULL;
- char *input_buffer = NULL;
- input_buffer = malloc (MAX_INPUT_BUFFER);
-
- setlocale (LC_ALL, "");
- bindtextdomain (PACKAGE, LOCALEDIR);
- textdomain (PACKAGE);
-
- if (process_arguments (argc, argv) == ERROR)
- usage4 (_("Could not parse arguments"));
-
- server = strscpy (server, server_name);
-
- /* compose the command */
- asprintf (&command_line, "%s -b %d -c %d %s", PATH_TO_FPING,
- packet_size, packet_count, server);
-
- if (verbose)
- printf ("%s\n", command_line);
-
- /* run the command */
- child_process = spopen (command_line);
- if (child_process == NULL) {
- printf (_("Could not open pipe: %s\n"), command_line);
- return STATE_UNKNOWN;
- }
-
- child_stderr = fdopen (child_stderr_array[fileno (child_process)], "r");
- if (child_stderr == NULL) {
- printf (_("Could not open stderr for %s\n"), command_line);
- }
-
- while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) {
- if (verbose)
- printf ("%s", input_buffer);
- status = max_state (status, textscan (input_buffer));
- }
-
- /* If we get anything on STDERR, at least set warning */
- while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_stderr)) {
- status = max_state (status, STATE_WARNING);
- if (verbose)
- printf ("%s", input_buffer);
- status = max_state (status, textscan (input_buffer));
- }
- (void) fclose (child_stderr);
-
- /* close the pipe */
- if (spclose (child_process))
- /* need to use max_state not max */
- status = max_state (status, STATE_WARNING);
-
- printf ("FPING %s - %s\n", state_text (status), server_name);
-
- return status;
+/* normaly should be int result = STATE_UNKNOWN; */
+
+ int status = STATE_UNKNOWN;
+ char *server = NULL;
+ char *command_line = NULL;
+ char *input_buffer = NULL;
+ input_buffer = malloc (MAX_INPUT_BUFFER);
+
+ setlocale (LC_ALL, "");
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
+ if (process_arguments (argc, argv) == ERROR)
+ usage4 (_("Could not parse arguments"));
+
+ server = strscpy (server, server_name);
+
+ /* compose the command */
+ asprintf (&command_line, "%s -b %d -c %d %s", PATH_TO_FPING,
+ packet_size, packet_count, server);
+
+ if (verbose)
+ printf ("%s\n", command_line);
+
+ /* run the command */
+ child_process = spopen (command_line);
+ if (child_process == NULL) {
+ printf (_("Could not open pipe: %s\n"), command_line);
+ return STATE_UNKNOWN;
+ }
+
+ child_stderr = fdopen (child_stderr_array[fileno (child_process)], "r");
+ if (child_stderr == NULL) {
+ printf (_("Could not open stderr for %s\n"), command_line);
+ }
+
+ while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) {
+ if (verbose)
+ printf ("%s", input_buffer);
+ status = max_state (status, textscan (input_buffer));
+ }
+
+ /* If we get anything on STDERR, at least set warning */
+ while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_stderr)) {
+ status = max_state (status, STATE_WARNING);
+ if (verbose)
+ printf ("%s", input_buffer);
+ status = max_state (status, textscan (input_buffer));
+ }
+ (void) fclose (child_stderr);
+
+ /* close the pipe */
+ if (spclose (child_process))
+ /* need to use max_state not max */
+ status = max_state (status, STATE_WARNING);
+
+ printf ("FPING %s - %s\n", state_text (status), server_name);
+
+ return status;
}
int
textscan (char *buf)
{
- char *rtastr = NULL;
- char *losstr = NULL;
- double loss;
- double rta;
- int status = STATE_UNKNOWN;
-
- if (strstr (buf, "not found")) {
- die (STATE_CRITICAL, _("FPING UNKNOW - %s not found\n"), server_name);
-
- }
- else if (strstr (buf, "is unreachable") || strstr (buf, "Unreachable")) {
- die (STATE_CRITICAL, _("FPING CRITICAL - %s is unreachable\n"),
- "host");
-
- }
- else if (strstr (buf, "is down")) {
- die (STATE_CRITICAL, _("FPING CRITICAL - %s is down\n"), server_name);
-
- }
- else if (strstr (buf, "is alive")) {
- status = STATE_OK;
-
- }
- else if (strstr (buf, "xmt/rcv/%loss") && strstr (buf, "min/avg/max")) {
- losstr = strstr (buf, "=");
- losstr = 1 + strstr (losstr, "/");
- losstr = 1 + strstr (losstr, "/");
- rtastr = strstr (buf, "min/avg/max");
- rtastr = strstr (rtastr, "=");
- rtastr = 1 + index (rtastr, '/');
- loss = strtod (losstr, NULL);
- rta = strtod (rtastr, NULL);
- if (cpl_p == TRUE && loss > cpl)
- status = STATE_CRITICAL;
- else if (crta_p == TRUE && rta > crta)
- status = STATE_CRITICAL;
- else if (wpl_p == TRUE && loss > wpl)
- status = STATE_WARNING;
- else if (wrta_p == TRUE && rta > wrta)
- status = STATE_WARNING;
- else
- status = STATE_OK;
- die (status,
- _("FPING %s - %s (loss=%.0f%%, rta=%f ms)|%s %s\n"),
- state_text (status), server_name, loss, rta,
- perfdata ("loss", (long int)loss, "%", wpl_p, wpl, cpl_p, cpl, TRUE, 0, TRUE, 100),
- fperfdata ("rta", rta/1.0e3, "s", wrta_p, wrta/1.0e3, crta_p, crta/1.0e3, TRUE, 0, FALSE, 0));
-
- }
- else if(strstr (buf, "xmt/rcv/%loss") ) {
- /* no min/max/avg if host was unreachable in fping v2.2.b1 */
- losstr = strstr (buf, "=");
- losstr = 1 + strstr (losstr, "/");
- losstr = 1 + strstr (losstr, "/");
- loss = strtod (losstr, NULL);
- if (atoi(losstr) == 100)
- status = STATE_CRITICAL;
- else if (cpl_p == TRUE && loss > cpl)
- status = STATE_CRITICAL;
- else if (wpl_p == TRUE && loss > wpl)
- status = STATE_WARNING;
- else
- status = STATE_OK;
- /* loss=%.0f%%;%d;%d;0;100 */
- die (status, _("FPING %s - %s (loss=%.0f%% )|%s\n"),
- state_text (status), server_name, loss ,
- perfdata ("loss", (long int)loss, "%", wpl_p, wpl, cpl_p, cpl, TRUE, 0, TRUE, 100));
-
- }
- else {
- status = max_state (status, STATE_WARNING);
- }
-
- return status;
+ char *rtastr = NULL;
+ char *losstr = NULL;
+ double loss;
+ double rta;
+ int status = STATE_UNKNOWN;
+
+ if (strstr (buf, "not found")) {
+ die (STATE_CRITICAL, _("FPING UNKNOW - %s not found\n"), server_name);
+
+ }
+ else if (strstr (buf, "is unreachable") || strstr (buf, "Unreachable")) {
+ die (STATE_CRITICAL, _("FPING CRITICAL - %s is unreachable\n"),
+ "host");
+
+ }
+ else if (strstr (buf, "is down")) {
+ die (STATE_CRITICAL, _("FPING CRITICAL - %s is down\n"), server_name);
+
+ }
+ else if (strstr (buf, "is alive")) {
+ status = STATE_OK;
+
+ }
+ else if (strstr (buf, "xmt/rcv/%loss") && strstr (buf, "min/avg/max")) {
+ losstr = strstr (buf, "=");
+ losstr = 1 + strstr (losstr, "/");
+ losstr = 1 + strstr (losstr, "/");
+ rtastr = strstr (buf, "min/avg/max");
+ rtastr = strstr (rtastr, "=");
+ rtastr = 1 + index (rtastr, '/');
+ loss = strtod (losstr, NULL);
+ rta = strtod (rtastr, NULL);
+ if (cpl_p == TRUE && loss > cpl)
+ status = STATE_CRITICAL;
+ else if (crta_p == TRUE && rta > crta)
+ status = STATE_CRITICAL;
+ else if (wpl_p == TRUE && loss > wpl)
+ status = STATE_WARNING;
+ else if (wrta_p == TRUE && rta > wrta)
+ status = STATE_WARNING;
+ else
+ status = STATE_OK;
+ die (status,
+ _("FPING %s - %s (loss=%.0f%%, rta=%f ms)|%s %s\n"),
+ state_text (status), server_name, loss, rta,
+ perfdata ("loss", (long int)loss, "%", wpl_p, wpl, cpl_p, cpl, TRUE, 0, TRUE, 100),
+ fperfdata ("rta", rta/1.0e3, "s", wrta_p, wrta/1.0e3, crta_p, crta/1.0e3, TRUE, 0, FALSE, 0));
+
+ }
+ else if(strstr (buf, "xmt/rcv/%loss") ) {
+ /* no min/max/avg if host was unreachable in fping v2.2.b1 */
+ losstr = strstr (buf, "=");
+ losstr = 1 + strstr (losstr, "/");
+ losstr = 1 + strstr (losstr, "/");
+ loss = strtod (losstr, NULL);
+ if (atoi(losstr) == 100)
+ status = STATE_CRITICAL;
+ else if (cpl_p == TRUE && loss > cpl)
+ status = STATE_CRITICAL;
+ else if (wpl_p == TRUE && loss > wpl)
+ status = STATE_WARNING;
+ else
+ status = STATE_OK;
+ /* loss=%.0f%%;%d;%d;0;100 */
+ die (status, _("FPING %s - %s (loss=%.0f%% )|%s\n"),
+ state_text (status), server_name, loss ,
+ perfdata ("loss", (long int)loss, "%", wpl_p, wpl, cpl_p, cpl, TRUE, 0, TRUE, 100));
+
+ }
+ else {
+ status = max_state (status, STATE_WARNING);
+ }
+
+ return status;
}
int
process_arguments (int argc, char **argv)
{
- int c;
- char *rv[2];
-
- int option = 0;
- static struct option longopts[] = {
- {"hostname", required_argument, 0, 'H'},
- {"critical", required_argument, 0, 'c'},
- {"warning", required_argument, 0, 'w'},
- {"bytes", required_argument, 0, 'b'},
- {"number", required_argument, 0, 'n'},
- {"verbose", no_argument, 0, 'v'},
- {"version", no_argument, 0, 'V'},
- {"help", no_argument, 0, 'h'},
- {0, 0, 0, 0}
- };
-
- rv[PL] = NULL;
- rv[RTA] = NULL;
-
- if (argc < 2)
- return ERROR;
-
- if (!is_option (argv[1])) {
- server_name = argv[1];
- argv[1] = argv[0];
- argv = &argv[1];
- argc--;
- }
-
- while (1) {
- c = getopt_long (argc, argv, "+hVvH:c:w:b:n:", longopts, &option);
-
- if (c == -1 || c == EOF || c == 1)
- break;
-
- switch (c) {
- case '?': /* print short usage statement if args not parsable */
- 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 mode */
- verbose = TRUE;
- break;
- case 'H': /* hostname */
- if (is_host (optarg) == FALSE) {
- usage2 (_("Invalid hostname/address"), optarg);
- }
- server_name = strscpy (server_name, optarg);
- break;
- case 'c':
- get_threshold (optarg, rv);
- if (rv[RTA]) {
- crta = strtod (rv[RTA], NULL);
- crta_p = TRUE;
- rv[RTA] = NULL;
- }
- if (rv[PL]) {
- cpl = atoi (rv[PL]);
- cpl_p = TRUE;
- rv[PL] = NULL;
- }
- break;
- case 'w':
- get_threshold (optarg, rv);
- if (rv[RTA]) {
- wrta = strtod (rv[RTA], NULL);
- wrta_p = TRUE;
- rv[RTA] = NULL;
- }
- if (rv[PL]) {
- wpl = atoi (rv[PL]);
- wpl_p = TRUE;
- rv[PL] = NULL;
- }
- break;
- case 'b': /* bytes per packet */
- if (is_intpos (optarg))
- packet_size = atoi (optarg);
- else
- usage (_("Packet size must be a positive integer"));
- break;
- case 'n': /* number of packets */
- if (is_intpos (optarg))
- packet_count = atoi (optarg);
- else
- usage (_("Packet count must be a positive integer"));
- break;
- }
- }
-
- if (server_name == NULL)
- usage4 (_("Hostname was not supplied"));
-
- return OK;
+ int c;
+ char *rv[2];
+
+ int option = 0;
+ static struct option longopts[] = {
+ {"hostname", required_argument, 0, 'H'},
+ {"critical", required_argument, 0, 'c'},
+ {"warning", required_argument, 0, 'w'},
+ {"bytes", required_argument, 0, 'b'},
+ {"number", required_argument, 0, 'n'},
+ {"verbose", no_argument, 0, 'v'},
+ {"version", no_argument, 0, 'V'},
+ {"help", no_argument, 0, 'h'},
+ {0, 0, 0, 0}
+ };
+
+ rv[PL] = NULL;
+ rv[RTA] = NULL;
+
+ if (argc < 2)
+ return ERROR;
+
+ if (!is_option (argv[1])) {
+ server_name = argv[1];
+ argv[1] = argv[0];
+ argv = &argv[1];
+ argc--;
+ }
+
+ while (1) {
+ c = getopt_long (argc, argv, "+hVvH:c:w:b:n:", longopts, &option);
+
+ if (c == -1 || c == EOF || c == 1)
+ break;
+
+ switch (c) {
+ case '?': /* print short usage statement if args not parsable */
+ 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 mode */
+ verbose = TRUE;
+ break;
+ case 'H': /* hostname */
+ if (is_host (optarg) == FALSE) {
+ usage2 (_("Invalid hostname/address"), optarg);
+ }
+ server_name = strscpy (server_name, optarg);
+ break;
+ case 'c':
+ get_threshold (optarg, rv);
+ if (rv[RTA]) {
+ crta = strtod (rv[RTA], NULL);
+ crta_p = TRUE;
+ rv[RTA] = NULL;
+ }
+ if (rv[PL]) {
+ cpl = atoi (rv[PL]);
+ cpl_p = TRUE;
+ rv[PL] = NULL;
+ }
+ break;
+ case 'w':
+ get_threshold (optarg, rv);
+ if (rv[RTA]) {
+ wrta = strtod (rv[RTA], NULL);
+ wrta_p = TRUE;
+ rv[RTA] = NULL;
+ }
+ if (rv[PL]) {
+ wpl = atoi (rv[PL]);
+ wpl_p = TRUE;
+ rv[PL] = NULL;
+ }
+ break;
+ case 'b': /* bytes per packet */
+ if (is_intpos (optarg))
+ packet_size = atoi (optarg);
+ else
+ usage (_("Packet size must be a positive integer"));
+ break;
+ case 'n': /* number of packets */
+ if (is_intpos (optarg))
+ packet_count = atoi (optarg);
+ else
+ usage (_("Packet count must be a positive integer"));
+ break;
+ }
+ }
+
+ if (server_name == NULL)
+ usage4 (_("Hostname was not supplied"));
+
+ return OK;
}
int
get_threshold (char *arg, char *rv[2])
{
- char *arg1 = NULL;
- char *arg2 = NULL;
-
- arg1 = strscpy (arg1, arg);
- if (strpbrk (arg1, ",:"))
- arg2 = 1 + strpbrk (arg1, ",:");
-
- if (arg2) {
- arg1[strcspn (arg1, ",:")] = 0;
- if (strstr (arg1, "%") && strstr (arg2, "%"))
- die (STATE_UNKNOWN,
- _("%s: Only one threshold may be packet loss (%s)\n"), progname,
- arg);
- if (!strstr (arg1, "%") && !strstr (arg2, "%"))
- die (STATE_UNKNOWN,
- _("%s: Only one threshold must be packet loss (%s)\n"),
- progname, arg);
- }
-
- if (arg2 && strstr (arg2, "%")) {
- rv[PL] = arg2;
- rv[RTA] = arg1;
- }
- else if (arg2) {
- rv[PL] = arg1;
- rv[RTA] = arg2;
- }
- else if (strstr (arg1, "%")) {
- rv[PL] = arg1;
- }
- else {
- rv[RTA] = arg1;
- }
-
- return OK;
+ char *arg1 = NULL;
+ char *arg2 = NULL;
+
+ arg1 = strscpy (arg1, arg);
+ if (strpbrk (arg1, ",:"))
+ arg2 = 1 + strpbrk (arg1, ",:");
+
+ if (arg2) {
+ arg1[strcspn (arg1, ",:")] = 0;
+ if (strstr (arg1, "%") && strstr (arg2, "%"))
+ die (STATE_UNKNOWN,
+ _("%s: Only one threshold may be packet loss (%s)\n"), progname,
+ arg);
+ if (!strstr (arg1, "%") && !strstr (arg2, "%"))
+ die (STATE_UNKNOWN,
+ _("%s: Only one threshold must be packet loss (%s)\n"),
+ progname, arg);
+ }
+
+ if (arg2 && strstr (arg2, "%")) {
+ rv[PL] = arg2;
+ rv[RTA] = arg1;
+ }
+ else if (arg2) {
+ rv[PL] = arg1;
+ rv[RTA] = arg2;
+ }
+ else if (strstr (arg1, "%")) {
+ rv[PL] = arg1;
+ }
+ else {
+ rv[RTA] = arg1;
+ }
+
+ return OK;
}
print_help (void)
{
- print_revision (progname, revision);
+ print_revision (progname, revision);
- printf ("Copyright (c) 1999 Didi Rieder <adrieder@sbox.tu-graz.ac.at>\n");
- printf (COPYRIGHT, copyright, email);
+ printf ("Copyright (c) 1999 Didi Rieder <adrieder@sbox.tu-graz.ac.at>\n");
+ printf (COPYRIGHT, copyright, email);
- printf (_("\
-This plugin will use the /bin/fping command to ping the specified host\n\
-for a fast check if the host is alive.\n\
-Note that it is necessary to set the suid flag on fping.\n\n"));
+ printf (_("This plugin will use the fping command to ping the specified host for a fast check"));
+
+ printf ("\n");
+
+ printf (_("Note that it is necessary to set the suid flag on fping."));
- print_usage ();
+ printf ("\n\n");
+
+ print_usage ();
- printf (_(UT_HELP_VRSN));
+ printf (_(UT_HELP_VRSN));
- printf (_("\
- -H, --hostname=HOST\n\
- Name or IP Address of host to ping (IP Address bypasses name lookup,\n\
- reducing system load)\n\
- -w, --warning=THRESHOLD\n\
- warning threshold pair\n\
- -c, --critical=THRESHOLD\n\
- critical threshold pair\n\
- -b, --bytes=INTEGER\n\
- Size of ICMP packet (default: %d)\n\
- -n, --number=INTEGER\n\
- Number of ICMP packets to send (default: %d)\n"),
- PACKET_SIZE, PACKET_COUNT);
+ printf (" -H, --hostname=HOST");
+
+ printf (_("name or IP Address of host to ping (IP Address bypasses name lookup, reducing system load)"));
+
+ printf ("\n");
+
+ printf ("-w, --warning=THRESHOLD");
+
+ printf ("\n");
+
+ printf (_("warning threshold pair"));
+
+ printf ("\n");
- printf (_(UT_VERBOSE));
+ printf (" -c, --critical=THRESHOLD");
+
+ printf ("\n");
- printf (_("\n\
-THRESHOLD is <rta>,<pl>%% where <rta> is the round trip average travel\n\
-time (ms) which triggers a WARNING or CRITICAL state, and <pl> is the\n\
-percentage of packet loss to trigger an alarm state.\n"));
+ printf (_("critical threshold pair"));
+
+ printf ("\n");
- printf (_(UT_SUPPORT));
+ printf (" -b, --bytes=INTEGER");
+
+ printf (_("size of ICMP packet (default: %d)"),PACKET_SIZE);
+
+ printf ("\n");
+
+ printf (" -n, --number=INTEGER");
+
+ printf ("\n");
+
+ printf (_("number of ICMP packets to send (default: %d)"),PACKET_COUNT);
+
+ printf ("\n");
+
+ printf (_(UT_VERBOSE));
+
+ printf ("\n");
+
+ printf (_("THRESHOLD is <rta>,<pl>%% where <rta> is the round trip average travel time (ms)"));
+
+ printf ("\n");
+
+ printf (_("which triggers a WARNING or CRITICAL state, and <pl> is the percentage of"));
+
+ printf ("\n");
+
+ printf (_("packet loss to trigger an alarm state."));
+
+ printf ("\n");
+
+ printf (_(UT_SUPPORT));
}
void
print_usage (void)
{
- printf ("Usage: %s <host_address>\n", progname);
+ printf (_("Usage:"));
+ printf (" %s <host_address>\n", progname);
}
diff --git a/plugins/check_game.c b/plugins/check_game.c
index 8548bbdbdfe2a662e230f42c6a06a84294320c90..9f9ff7d84fc6372f7ce91bc7d0428f53c4bad3c8 100644 (file)
--- a/plugins/check_game.c
+++ b/plugins/check_game.c
const char *progname = "check_game";
const char *revision = "$Revision$";
-const char *copyright = "2002-2004";
+const char *copyright = "2002-2005";
const char *email = "nagiosplug-devel@lists.sourceforge.net";
#include "common.h"
void print_help (void);
void print_usage (void);
-#define QSTAT_DATA_DELIMITER ","
+#define QSTAT_DATA_DELIMITER ","
-#define QSTAT_HOST_ERROR "ERROR"
-#define QSTAT_HOST_DOWN "DOWN"
-#define QSTAT_HOST_TIMEOUT "TIMEOUT"
-#define QSTAT_MAX_RETURN_ARGS 12
+#define QSTAT_HOST_ERROR "ERROR"
+#define QSTAT_HOST_DOWN "DOWN"
+#define QSTAT_HOST_TIMEOUT "TIMEOUT"
+#define QSTAT_MAX_RETURN_ARGS 12
char *server_ip;
char *game_type;
int
main (int argc, char **argv)
{
- char *command_line;
- int result = STATE_UNKNOWN;
- char *p, *ret[QSTAT_MAX_RETURN_ARGS];
- size_t i = 0;
- output chld_out;
-
- setlocale (LC_ALL, "");
- bindtextdomain (PACKAGE, LOCALEDIR);
- textdomain (PACKAGE);
-
- if (process_arguments (argc, argv) == ERROR)
- usage_va(_("Could not parse arguments"));
-
- result = STATE_OK;
-
- /* create the command line to execute */
- asprintf (&command_line, "%s -raw %s -%s %s",
- PATH_TO_QSTAT, QSTAT_DATA_DELIMITER, game_type, server_ip);
-
- if (port)
- asprintf (&command_line, "%s:%-d", command_line, port);
-
- if (verbose > 0)
- printf ("%s\n", command_line);
-
- /* run the command. historically, this plugin ignores output on stderr,
- * as well as return status of the qstat program */
- (void)np_runcmd(command_line, &chld_out, NULL, 0);
-
- /* sanity check */
- /* was thinking about running qstat without any options, capturing the
- -default line, parsing it & making an array of all know server types
- but thought this would be too much hassle considering this is a tool
- for intelligent sysadmins (ha). Could put a static array of known
- server types in a header file but then we'd be limiting ourselves
-
- In the end, I figured I'd simply let an error occur & then trap it
- */
-
- if (!strncmp (chld_out.line[0], "unknown option", 14)) {
- printf (_("CRITICAL - Host type parameter incorrect!\n"));
- result = STATE_CRITICAL;
- return result;
- }
-
- p = (char *) strtok (chld_out.line[0], QSTAT_DATA_DELIMITER);
- while (p != NULL) {
- ret[i] = p;
- p = (char *) strtok (NULL, QSTAT_DATA_DELIMITER);
- i++;
- if (i >= QSTAT_MAX_RETURN_ARGS)
- break;
- }
-
- if (strstr (ret[2], QSTAT_HOST_ERROR)) {
- printf (_("CRITICAL - Host not found\n"));
- result = STATE_CRITICAL;
- }
- else if (strstr (ret[2], QSTAT_HOST_DOWN)) {
- printf (_("CRITICAL - Game server down or unavailable\n"));
- result = STATE_CRITICAL;
- }
- else if (strstr (ret[2], QSTAT_HOST_TIMEOUT)) {
- printf (_("CRITICAL - Game server timeout\n"));
- result = STATE_CRITICAL;
- }
- else {
- printf ("OK: %s/%s %s (%s), Ping: %s ms|%s %s\n",
- ret[qstat_game_players],
- ret[qstat_game_players_max],
- ret[qstat_game_field],
- ret[qstat_map_field],
- ret[qstat_ping_field],
- perfdata ("players", atol(ret[qstat_game_players]), "",
- FALSE, 0, FALSE, 0,
- TRUE, 0, TRUE, atol(ret[qstat_game_players_max])),
- fperfdata ("ping", strtod(ret[qstat_ping_field], NULL), "",
- FALSE, 0, FALSE, 0,
- TRUE, 0, FALSE, 0));
- }
-
- return result;
+ char *command_line;
+ int result = STATE_UNKNOWN;
+ char *p, *ret[QSTAT_MAX_RETURN_ARGS];
+ size_t i = 0;
+ output chld_out;
+
+ setlocale (LC_ALL, "");
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
+ if (process_arguments (argc, argv) == ERROR)
+ usage_va(_("Could not parse arguments"));
+
+ result = STATE_OK;
+
+ /* create the command line to execute */
+ asprintf (&command_line, "%s -raw %s -%s %s",
+ PATH_TO_QSTAT, QSTAT_DATA_DELIMITER, game_type, server_ip);
+
+ if (port)
+ asprintf (&command_line, "%s:%-d", command_line, port);
+
+ if (verbose > 0)
+ printf ("%s\n", command_line);
+
+ /* run the command. historically, this plugin ignores output on stderr,
+ * as well as return status of the qstat program */
+ (void)np_runcmd(command_line, &chld_out, NULL, 0);
+
+ /* sanity check */
+ /* was thinking about running qstat without any options, capturing the
+ -default line, parsing it & making an array of all know server types
+ but thought this would be too much hassle considering this is a tool
+ for intelligent sysadmins (ha). Could put a static array of known
+ server types in a header file but then we'd be limiting ourselves
+
+ In the end, I figured I'd simply let an error occur & then trap it
+ */
+
+ if (!strncmp (chld_out.line[0], "unknown option", 14)) {
+ printf (_("CRITICAL - Host type parameter incorrect!\n"));
+ result = STATE_CRITICAL;
+ return result;
+ }
+
+ p = (char *) strtok (chld_out.line[0], QSTAT_DATA_DELIMITER);
+ while (p != NULL) {
+ ret[i] = p;
+ p = (char *) strtok (NULL, QSTAT_DATA_DELIMITER);
+ i++;
+ if (i >= QSTAT_MAX_RETURN_ARGS)
+ break;
+ }
+
+ if (strstr (ret[2], QSTAT_HOST_ERROR)) {
+ printf (_("CRITICAL - Host not found\n"));
+ result = STATE_CRITICAL;
+ }
+ else if (strstr (ret[2], QSTAT_HOST_DOWN)) {
+ printf (_("CRITICAL - Game server down or unavailable\n"));
+ result = STATE_CRITICAL;
+ }
+ else if (strstr (ret[2], QSTAT_HOST_TIMEOUT)) {
+ printf (_("CRITICAL - Game server timeout\n"));
+ result = STATE_CRITICAL;
+ }
+ else {
+ printf ("OK: %s/%s %s (%s), Ping: %s ms|%s %s\n",
+ ret[qstat_game_players],
+ ret[qstat_game_players_max],
+ ret[qstat_game_field],
+ ret[qstat_map_field],
+ ret[qstat_ping_field],
+ perfdata ("players", atol(ret[qstat_game_players]), "",
+ FALSE, 0, FALSE, 0,
+ TRUE, 0, TRUE, atol(ret[qstat_game_players_max])),
+ fperfdata ("ping", strtod(ret[qstat_ping_field], NULL), "",
+ FALSE, 0, FALSE, 0,
+ TRUE, 0, FALSE, 0));
+ }
+
+ return result;
}
int
process_arguments (int argc, char **argv)
{
- int c;
-
- int opt_index = 0;
- static struct option long_opts[] = {
- {"help", no_argument, 0, 'h'},
- {"version", no_argument, 0, 'V'},
- {"verbose", no_argument, 0, 'v'},
- {"timeout", required_argument, 0, 't'},
- {"hostname", required_argument, 0, 'H'},
- {"port", required_argument, 0, 'P'},
- {"game-type", required_argument, 0, 'G'},
- {"map-field", required_argument, 0, 'm'},
- {"ping-field", required_argument, 0, 'p'},
- {"game-field", required_argument, 0, 'g'},
- {"players-field", required_argument, 0, 129},
- {"max-players-field", required_argument, 0, 130},
- {0, 0, 0, 0}
- };
-
- if (argc < 2)
- return ERROR;
-
- for (c = 1; c < argc; c++) {
- if (strcmp ("-mf", argv[c]) == 0)
- strcpy (argv[c], "-m");
- else if (strcmp ("-pf", argv[c]) == 0)
- strcpy (argv[c], "-p");
- else if (strcmp ("-gf", argv[c]) == 0)
- strcpy (argv[c], "-g");
- }
-
- while (1) {
- c = getopt_long (argc, argv, "hVvt:H:P:G:g:p:m:", long_opts, &opt_index);
-
- if (c == -1 || c == EOF)
- break;
-
- switch (c) {
- case 'h': /* help */
- print_help ();
- exit (STATE_OK);
- case 'V': /* version */
- print_revision (progname, revision);
- exit (STATE_OK);
- case 'v': /* version */
- verbose = TRUE;
- break;
- case 't': /* timeout period */
- timeout_interval = atoi (optarg);
- break;
- case 'H': /* hostname */
- if (strlen (optarg) >= MAX_HOST_ADDRESS_LENGTH)
- die (STATE_UNKNOWN, _("Input buffer overflow\n"));
- server_ip = optarg;
- break;
- case 'P': /* port */
- port = atoi (optarg);
- break;
- case 'G': /* hostname */
- if (strlen (optarg) >= MAX_INPUT_BUFFER)
- die (STATE_UNKNOWN, _("Input buffer overflow\n"));
- game_type = optarg;
- break;
- case 'p': /* index of ping field */
- qstat_ping_field = atoi (optarg);
- if (qstat_ping_field < 0 || qstat_ping_field > QSTAT_MAX_RETURN_ARGS)
- return ERROR;
- break;
- case 'm': /* index on map field */
- qstat_map_field = atoi (optarg);
- if (qstat_map_field < 0 || qstat_map_field > QSTAT_MAX_RETURN_ARGS)
- return ERROR;
- break;
- case 'g': /* index of game field */
- qstat_game_field = atoi (optarg);
- if (qstat_game_field < 0 || qstat_game_field > QSTAT_MAX_RETURN_ARGS)
- return ERROR;
- break;
- case 129: /* index of player count field */
- qstat_game_players = atoi (optarg);
- if (qstat_game_players_max == 0)
- qstat_game_players_max = qstat_game_players - 1;
- if (qstat_game_players < 0 || qstat_game_players > QSTAT_MAX_RETURN_ARGS)
- return ERROR;
- break;
- case 130: /* index of max players field */
- qstat_game_players_max = atoi (optarg);
- if (qstat_game_players_max < 0 || qstat_game_players_max > QSTAT_MAX_RETURN_ARGS)
- return ERROR;
- break;
- default: /* args not parsable */
- usage_va(_("Unknown argument - %s"), optarg);
- }
- }
-
- c = optind;
- /* first option is the game type */
- if (!game_type && c<argc)
- game_type = strdup (argv[c++]);
-
- /* Second option is the server name */
- if (!server_ip && c<argc)
- server_ip = strdup (argv[c++]);
-
- return validate_arguments ();
+ int c;
+
+ int opt_index = 0;
+ static struct option long_opts[] = {
+ {"help", no_argument, 0, 'h'},
+ {"version", no_argument, 0, 'V'},
+ {"verbose", no_argument, 0, 'v'},
+ {"timeout", required_argument, 0, 't'},
+ {"hostname", required_argument, 0, 'H'},
+ {"port", required_argument, 0, 'P'},
+ {"game-type", required_argument, 0, 'G'},
+ {"map-field", required_argument, 0, 'm'},
+ {"ping-field", required_argument, 0, 'p'},
+ {"game-field", required_argument, 0, 'g'},
+ {"players-field", required_argument, 0, 129},
+ {"max-players-field", required_argument, 0, 130},
+ {0, 0, 0, 0}
+ };
+
+ if (argc < 2)
+ return ERROR;
+
+ for (c = 1; c < argc; c++) {
+ if (strcmp ("-mf", argv[c]) == 0)
+ strcpy (argv[c], "-m");
+ else if (strcmp ("-pf", argv[c]) == 0)
+ strcpy (argv[c], "-p");
+ else if (strcmp ("-gf", argv[c]) == 0)
+ strcpy (argv[c], "-g");
+ }
+
+ while (1) {
+ c = getopt_long (argc, argv, "hVvt:H:P:G:g:p:m:", long_opts, &opt_index);
+
+ if (c == -1 || c == EOF)
+ break;
+
+ switch (c) {
+ case 'h': /* help */
+ print_help ();
+ exit (STATE_OK);
+ case 'V': /* version */
+ print_revision (progname, revision);
+ exit (STATE_OK);
+ case 'v': /* version */
+ verbose = TRUE;
+ break;
+ case 't': /* timeout period */
+ timeout_interval = atoi (optarg);
+ break;
+ case 'H': /* hostname */
+ if (strlen (optarg) >= MAX_HOST_ADDRESS_LENGTH)
+ die (STATE_UNKNOWN, _("Input buffer overflow\n"));
+ server_ip = optarg;
+ break;
+ case 'P': /* port */
+ port = atoi (optarg);
+ break;
+ case 'G': /* hostname */
+ if (strlen (optarg) >= MAX_INPUT_BUFFER)
+ die (STATE_UNKNOWN, _("Input buffer overflow\n"));
+ game_type = optarg;
+ break;
+ case 'p': /* index of ping field */
+ qstat_ping_field = atoi (optarg);
+ if (qstat_ping_field < 0 || qstat_ping_field > QSTAT_MAX_RETURN_ARGS)
+ return ERROR;
+ break;
+ case 'm': /* index on map field */
+ qstat_map_field = atoi (optarg);
+ if (qstat_map_field < 0 || qstat_map_field > QSTAT_MAX_RETURN_ARGS)
+ return ERROR;
+ break;
+ case 'g': /* index of game field */
+ qstat_game_field = atoi (optarg);
+ if (qstat_game_field < 0 || qstat_game_field > QSTAT_MAX_RETURN_ARGS)
+ return ERROR;
+ break;
+ case 129: /* index of player count field */
+ qstat_game_players = atoi (optarg);
+ if (qstat_game_players_max == 0)
+ qstat_game_players_max = qstat_game_players - 1;
+ if (qstat_game_players < 0 || qstat_game_players > QSTAT_MAX_RETURN_ARGS)
+ return ERROR;
+ break;
+ case 130: /* index of max players field */
+ qstat_game_players_max = atoi (optarg);
+ if (qstat_game_players_max < 0 || qstat_game_players_max > QSTAT_MAX_RETURN_ARGS)
+ return ERROR;
+ break;
+ default: /* args not parsable */
+ usage_va(_("Unknown argument - %s"), optarg);
+ }
+ }
+
+ c = optind;
+ /* first option is the game type */
+ if (!game_type && c<argc)
+ game_type = strdup (argv[c++]);
+
+ /* Second option is the server name */
+ if (!server_ip && c<argc)
+ server_ip = strdup (argv[c++]);
+
+ return validate_arguments ();
}
int
validate_arguments (void)
{
- if (qstat_game_players_max < 0)
- qstat_game_players_max = 4;
+ if (qstat_game_players_max < 0)
+ qstat_game_players_max = 4;
- if (qstat_game_players < 0)
- qstat_game_players = 5;
+ if (qstat_game_players < 0)
+ qstat_game_players = 5;
- if (qstat_game_field < 0)
- qstat_game_field = 2;
+ if (qstat_game_field < 0)
+ qstat_game_field = 2;
- if (qstat_map_field < 0)
- qstat_map_field = 3;
+ if (qstat_map_field < 0)
+ qstat_map_field = 3;
- if (qstat_ping_field < 0)
- qstat_ping_field = 5;
+ if (qstat_ping_field < 0)
+ qstat_ping_field = 5;
- return OK;
+ return OK;
}
void
print_help (void)
{
- print_revision (progname, revision);
+ print_revision (progname, revision);
- printf ("Copyright (c) 1999 Ian Cass, Knowledge Matters Limited\n");
- printf (COPYRIGHT, copyright, email);
+ printf ("Copyright (c) 1999 Ian Cass, Knowledge Matters Limited\n");
+ printf (COPYRIGHT, copyright, email);
- printf (_("This plugin tests game server connections with the specified host."));
+ printf (_("This plugin tests game server connections with the specified host."));
- print_usage ();
+ printf ("\n\n");
+
+ print_usage ();
- printf (_(UT_HELP_VRSN));
+ printf (_(UT_HELP_VRSN));
- printf (_("\
+ printf (_("\
<game> = Game type that is recognised by qstat (without the leading dash)\n\
<ip_address> = The IP address of the device you wish to query\n\
[port] = Optional port of which to connect\n\
[map_field] = Field number in raw qstat output that contains map name\n\
[ping_field] = Field number in raw qstat output that contains ping time\n"));
- printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT);
+ printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT);
- printf (_("\n\
-Notes:\n\
-- This plugin uses the 'qstat' command, the popular game server status query tool .\n\
- If you don't have the package installed, you will need to download it from\n\
- http://www.activesw.com/people/steve/qstat.html before you can use this plugin.\n"));
+ printf (_("Notes:"));
+
+ printf ("\n");
- printf (_(UT_SUPPORT));
+ printf (_("This plugin uses the 'qstat' command, the popular game server status query tool ."));
+
+ printf ("\n");
+
+ printf (_("If you don't have the package installed, you will need to download it from"));
+
+ printf ("\n");
+
+ printf (_("http://www.activesw.com/people/steve/qstat.html before you can use this plugin."));
+
+ printf ("\n");
+
+ printf (_(UT_SUPPORT));
}
void
print_usage (void)
{
- printf ("\
-Usage: %s <game> <ip_address> [-p port] [-gf game_field] [-mf map_field]\n\
- [-pf ping_field]\n", progname);
+ printf (_("Usage:"));
+ printf (" %s <game> <ip_address> [-p port] [-gf game_field] [-mf map_field] [-pf ping_field]\n", progname);
}
/******************************************************************************