aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--THANKS.in1
-rw-r--r--plugins/check_dig.c11
2 files changed, 10 insertions, 2 deletions
diff --git a/THANKS.in b/THANKS.in
index aef787c2..2cfa54ec 100644
--- a/THANKS.in
+++ b/THANKS.in
@@ -305,3 +305,4 @@ Geoff Oakham
Tim Laszlo
Stéphane Bortzmeyer
Luca Corti
+Jethro Carr
diff --git a/plugins/check_dig.c b/plugins/check_dig.c
index 7575995d..5638017c 100644
--- a/plugins/check_dig.c
+++ b/plugins/check_dig.c
@@ -48,6 +48,8 @@ void print_usage (void);
#define UNDEFINED 0
#define DEFAULT_PORT 53
+#define DEFAULT_TRIES 3
+#define DEFAULT_TIMEOUT 10
char *query_address = NULL;
char *record_type = "A";
@@ -57,6 +59,7 @@ char *dig_args = "";
char *query_transport = "";
int verbose = FALSE;
int server_port = DEFAULT_PORT;
+int number_tries = DEFAULT_TRIES;
double warning_interval = UNDEFINED;
double critical_interval = UNDEFINED;
struct timeval tv;
@@ -72,6 +75,7 @@ main (int argc, char **argv)
long microsec;
double elapsed_time;
int result = STATE_UNKNOWN;
+ timeout_interval = DEFAULT_TIMEOUT;
setlocale (LC_ALL, "");
bindtextdomain (PACKAGE, LOCALEDIR);
@@ -87,9 +91,12 @@ main (int argc, char **argv)
if (process_arguments (argc, argv) == ERROR)
usage_va(_("Could not parse arguments"));
+ /* dig applies the timeout to each try, so we need to work around this */
+ int timeout_interval_dig = ceil((double) timeout_interval / (double) number_tries);
+
/* get the command to run */
- xasprintf (&command_line, "%s %s @%s -p %d %s -t %s %s",
- PATH_TO_DIG, query_transport, dns_server, server_port, query_address, record_type, dig_args);
+ xasprintf (&command_line, "%s @%s -p %d %s -t %s %s %s +tries=%d +time=%d",
+ PATH_TO_DIG, dns_server, server_port, query_address, record_type, dig_args, query_transport, number_tries, timeout_interval_dig);
alarm (timeout_interval);
gettimeofday (&tv, NULL);