summaryrefslogtreecommitdiff
path: root/usr.sbin/hoststated
diff options
context:
space:
mode:
authorReyk Floeter <reyk@cvs.openbsd.org>2007-01-08 16:50:05 +0000
committerReyk Floeter <reyk@cvs.openbsd.org>2007-01-08 16:50:05 +0000
commit40f355c442fea645d90f475ab659d79d5ef06efb (patch)
tree358eebf1eb95b7a952ffc7654df7131130c11343 /usr.sbin/hoststated
parent7c3851e6547958de885909d55e3d4e0931af0fef (diff)
the timeout values are not allowed to exceed the global interval (i
figured this out while testing hostated against a stottering spamd where the send/expect timeout needs be > 10 seconds). also use another struct timeval to store the interval for easier handling in the code. ok Pierre-Yves Ritschard (pyr at spootnik dot org)
Diffstat (limited to 'usr.sbin/hoststated')
-rw-r--r--usr.sbin/hoststated/parse.y20
1 files changed, 16 insertions, 4 deletions
diff --git a/usr.sbin/hoststated/parse.y b/usr.sbin/hoststated/parse.y
index 92b0a371521..785a835874c 100644
--- a/usr.sbin/hoststated/parse.y
+++ b/usr.sbin/hoststated/parse.y
@@ -1,4 +1,4 @@
-/* $OpenBSD: parse.y,v 1.10 2007/01/08 14:30:31 reyk Exp $ */
+/* $OpenBSD: parse.y,v 1.11 2007/01/08 16:50:04 reyk Exp $ */
/*
* Copyright (c) 2006 Pierre-Yves Ritschard <pyr@spootnik.org>
@@ -157,7 +157,7 @@ sendbuf : NOTHING {
}
;
-main : INTERVAL number { conf->interval = $2; }
+main : INTERVAL number { conf->interval.tv_sec = $2; }
| TIMEOUT timeout {
bcopy(&$2, &conf->timeout, sizeof(struct timeval));
}
@@ -741,7 +741,8 @@ parse_config(struct hostated *x_conf, const char *filename, int opts)
conf->timeout.tv_sec = CHECK_TIMEOUT / 1000;
conf->timeout.tv_usec = (CHECK_TIMEOUT % 1000) * 1000;
- conf->interval = CHECK_INTERVAL;
+ conf->interval.tv_sec = CHECK_INTERVAL;
+ conf->interval.tv_usec = 0;
conf->opts = opts;
if ((fin = fopen(filename, "r")) == NULL) {
@@ -771,12 +772,23 @@ parse_config(struct hostated *x_conf, const char *filename, int opts)
errors++;
}
+ if (timercmp(&conf->timeout, &conf->interval, >=)) {
+ log_warnx("global timeout exceeds interval");
+ errors++;
+ }
+
/* Verify that every table is used */
- TAILQ_FOREACH(table, &conf->tables, entry)
+ TAILQ_FOREACH(table, &conf->tables, entry) {
if (!(table->flags & F_USED)) {
log_warnx("unused table: %s", table->name);
errors++;
}
+ if (timercmp(&table->timeout, &conf->interval, >=)) {
+ log_warnx("table timeout exceeds interval: %s",
+ table->name);
+ errors++;
+ }
+ }
if (errors) {
bzero(&conf, sizeof (*conf));