-* [Bug 785] improve handling of multicast interfaces (multicast routers still need to run a multicast routing software/daemon)
+* [Bug 789] Fix multicast client crypto authentication and make sure arriving
+ multicast packets do not disturb the autokey dance.
+* [Bug 785] improve handling of multicast interfaces
+ (multicast routers still need to run a multicast routing software/daemon)
(4.2.4p1) Released by Harlan Stenn <stenn@ntp.org>
* [Bug 811] ntpd should not read a .ntprc file.
* [Bug 793] Update Hans Lambermont's email address in ntpsweep.
set_peerdstadr(struct peer *peer, struct interface *interface)
{
if (peer->dstadr != interface) {
- struct interface *prev_dstadr = peer->dstadr;
+ if (interface != NULL &&
+ (peer->cast_flags & MDF_BCLNT) &&
+ (interface->flags & INT_MCASTIF) &&
+ peer->burst) {
+ /*
+ * don't accept updates to a true multicast reception
+ * interface while a BCLNT peer is running it's
+ * unicast protocol
+ */
+ return;
+ }
if (peer->dstadr != NULL)
{
peer->dstadr = interface;
- if (prev_dstadr != NULL) {
- /*
- * reset crypto information if we change from an
- * active interface
- * all other crypto updates are handled by the crypto
- * machinery
- */
- peer_crypto_clear(peer);
- }
-
if (peer->dstadr != NULL)
{
ISC_LIST_APPEND(peer->dstadr->peers, peer, ilink);
static void
peer_refresh_interface(struct peer *peer)
{
- struct interface *niface;
+ struct interface *niface, *piface;
niface = select_peerinterface(peer, &peer->srcadr, NULL, peer->cast_flags);
}
#endif
+ piface = peer->dstadr;
+
set_peerdstadr(peer, niface);
if (peer->dstadr) {
+ /*
+ * clear crypto if we change the local address
+ */
+ if (peer->dstadr != piface && !(peer->cast_flags & MDF_BCLNT)) {
+ peer_crypto_clear(peer);
+ }
+
/*
* Broadcast needs the socket enabled for broadcast
*/