free(dhcp);
return NULL;
}
- syslog(LOG_DEBUG, "%s: validated using 0x%08" PRIu32,
- ifp->name, state->auth.token->secretid);
+ if (state->auth.token)
+ syslog(LOG_DEBUG, "%s: validated using 0x%08" PRIu32,
+ ifp->name, state->auth.token->secretid);
+ else
+ syslog(LOG_DEBUG, "%s: accepted reconfigure key",
+ ifp->name);
}
return dhcp;
iface, dhcp, from, 0);
return;
}
- syslog(LOG_DEBUG, "%s: validated using 0x%08" PRIu32,
- iface->name, state->auth.token->secretid);
+ if (state->auth.token)
+ syslog(LOG_DEBUG, "%s: validated using 0x%08" PRIu32,
+ iface->name, state->auth.token->secretid);
+ else
+ syslog(LOG_DEBUG, "%s: accepted reconfigure key",
+ iface->name);
} else if (ifo->auth.options & DHCPCD_AUTH_REQUIRE) {
log_dhcp1(LOG_ERR, "no authentication", iface, dhcp, from, 0);
return;
const struct if_options *ifo;
const struct dhcp6_option *o;
const uint8_t *p;
- int i;
+ int i, e;
uint32_t u32, renew, rebind;
uint8_t iaid[4];
size_t ol;
struct ipv6_addr *ap, *nap;
ifo = ifp->options;
- i = 0;
+ i = e = 0;
state = D6_STATE(ifp);
TAILQ_FOREACH(ap, &state->addrs, next) {
ap->flags |= IPV6_AF_STALE;
ol -= sizeof(u32);
} else
renew = rebind = 0; /* appease gcc */
- if (dhcp6_checkstatusok(ifp, NULL, p, ol) == -1)
+ if (dhcp6_checkstatusok(ifp, NULL, p, ol) == -1) {
+ e = 1;
continue;
+ }
if (ifo->ia_type == D6_OPTION_IA_PD) {
if (dhcp6_findpd(ifp, iaid, p, ol) == 0) {
syslog(LOG_WARNING,
free(ap);
}
}
+ if (i == 0 && e)
+ return -1;
return i;
}
ifp->name);
goto ex;
}
- syslog(LOG_DEBUG, "%s: validated using 0x%08" PRIu32,
- ifp->name, state->auth.token->secretid);
+ if (state->auth.token)
+ syslog(LOG_DEBUG, "%s: validated using 0x%08" PRIu32,
+ ifp->name, state->auth.token->secretid);
+ else
+ syslog(LOG_DEBUG, "%s: accepted reconfigure key",
+ ifp->name);
} else if (ifp->options->auth.options & DHCPCD_AUTH_REQUIRE) {
syslog(LOG_ERR, "%s: authentication now required", ifp->name);
goto ex;
ifp->name);
return;
}
+
+ r = (struct dhcp6_message *)ctx->rcvhdr.msg_iov[0].iov_base;
+
/* We're already bound and this message is for another machine */
/* XXX DELEGATED? */
- if (state->state == DH6S_BOUND ||
- state->state == DH6S_INFORMED)
+ if (r->type != DHCP6_RECONFIGURE &&
+ (state->state == DH6S_BOUND || state->state == DH6S_INFORMED))
return;
r = (struct dhcp6_message *)ctx->rcvhdr.msg_iov[0].iov_base;
ifp->name, ctx->sfrom);
return;
}
- syslog(LOG_DEBUG, "%s: validated using 0x%08" PRIu32,
- ifp->name, state->auth.token->secretid);
+ if (state->auth.token)
+ syslog(LOG_DEBUG, "%s: validated using 0x%08" PRIu32,
+ ifp->name, state->auth.token->secretid);
+ else
+ syslog(LOG_DEBUG, "%s: accepted reconfigure key",
+ ifp->name);
} else if (ifo->auth.options & DHCPCD_AUTH_REQUIRE) {
syslog(LOG_ERR, "%s: no authentication from %s",
ifp->name, ctx->sfrom);
if (error == 1)
goto recv;
if (error == -1 ||
- dhcp6_validatelease(ifp, r, len, ctx->sfrom) == -1){
+ dhcp6_validatelease(ifp, r, len, ctx->sfrom) == -1)
+ {
dhcp6_startdiscover(ifp);
return;
}