summaryrefslogtreecommitdiff
path: root/server/failover.c
diff options
context:
space:
mode:
authorDavid Hankins <dhankins@isc.org>2007-09-17 17:18:49 +0000
committerDavid Hankins <dhankins@isc.org>2007-09-17 17:18:49 +0000
commitfa9b593de757823c973369a2e448be92b53a01d5 (patch)
tree414b348ea8eb5d5c02f04987a0d49ce722e09c38 /server/failover.c
parentab3a540fbea72f0bd045ed9cf0c48e4d6a3a7397 (diff)
downloadisc-dhcp-fa9b593de757823c973369a2e448be92b53a01d5.tar.gz
- Log messages when failover peer names mismatch have been improved to
point out the problem.
Diffstat (limited to 'server/failover.c')
-rw-r--r--server/failover.c39
1 files changed, 30 insertions, 9 deletions
diff --git a/server/failover.c b/server/failover.c
index 2d305cae..06ebe388 100644
--- a/server/failover.c
+++ b/server/failover.c
@@ -276,6 +276,8 @@ isc_result_t dhcp_failover_link_signal (omapi_object_t *h,
dhcp_failover_link_t *link;
omapi_object_t *c;
dhcp_failover_state_t *s, *state = (dhcp_failover_state_t *)0;
+ char *sname;
+ int slen;
if (h -> type != dhcp_type_failover_link) {
/* XXX shouldn't happen. Put an assert here? */
@@ -490,19 +492,32 @@ isc_result_t dhcp_failover_link_signal (omapi_object_t *h,
if (dhcp_failover_state_match_by_name(s,
&link->imsg->relationship_name))
state = s;
- }
+ }
/* If we can't find a failover protocol state
for this remote host, drop the connection */
if (!state) {
- errmsg = "unknown server";
+ errmsg = "unknown failover relationship name";
reason = FTR_INVALID_PARTNER;
badconnect:
/* XXX Send a refusal message first?
XXX Look in protocol spec for guidance. */
- log_error ("Failover CONNECT from %s: %s",
- state? state->name : "unknown", errmsg);
+
+ if (state != NULL) {
+ sname = state->name;
+ slen = strlen(sname);
+ } else if (link->imsg->options_present &
+ FTB_RELATIONSHIP_NAME) {
+ sname = link->imsg->relationship_name.data;
+ slen = link->imsg->relationship_name.count;
+ } else {
+ sname = "unknown";
+ slen = strlen(sname);
+ }
+
+ log_error("Failover CONNECT from %.*s: %s",
+ slen, sname, errmsg);
dhcp_failover_send_connectack
((omapi_object_t *)link, state,
reason, errmsg);
@@ -572,7 +587,7 @@ isc_result_t dhcp_failover_link_signal (omapi_object_t *h,
break;
default:
- /* XXX should never get here. Assertion? */
+ log_fatal("Impossible case at %s:%d.", MDL);
break;
}
return ISC_R_SUCCESS;
@@ -1260,6 +1275,7 @@ isc_result_t dhcp_failover_state_signal (omapi_object_t *o,
link);
} else if (link -> imsg -> type == FTM_CONNECTACK) {
const char *errmsg;
+ char errbuf[1024];
int reason;
cancel_timeout (dhcp_failover_link_startup_timeout,
@@ -1282,14 +1298,19 @@ isc_result_t dhcp_failover_state_signal (omapi_object_t *o,
omapi_disconnect (link -> outer, 1);
return ISC_R_SUCCESS;
}
-
+
if (!dhcp_failover_state_match_by_name(state,
&link->imsg->relationship_name)) {
- errmsg = "unknown server";
+ /* XXX: Overflow results in log truncation, safe. */
+ snprintf(errbuf, sizeof(errbuf), "remote failover "
+ "relationship name %.*s does not match",
+ link->imsg->relationship_name.count,
+ link->imsg->relationship_name.data);
+ errmsg = errbuf;
reason = FTR_INVALID_PARTNER;
badconnectack:
- log_error ("Failover CONNECTACK from %s: %s",
- state ? state->name : "unknown", errmsg);
+ log_error("Failover CONNECTACK from %s: %s",
+ state->name, errmsg);
dhcp_failover_send_disconnect ((omapi_object_t *)link,
reason, errmsg);
omapi_disconnect (link -> outer, 0);