From: Frank Kardel Date: Sun, 25 Feb 2007 17:21:59 +0000 (+0000) Subject: ntp_peer.c: X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=95b9a8024103d3f4d92efd85a8f6589dc4a4dca4;p=thirdparty%2Fntp.git ntp_peer.c: Bug 789: insure that crypto information is only cleared when the local address changes. fixes multicast client mode bk: 45e1c5b7aVU3_MQHPkYSKy4UVHrFsg --- diff --git a/ntpd/ntp_peer.c b/ntpd/ntp_peer.c index 36f316816e..e57a4a8139 100644 --- a/ntpd/ntp_peer.c +++ b/ntpd/ntp_peer.c @@ -530,8 +530,6 @@ void set_peerdstadr(struct peer *peer, struct interface *interface) { if (peer->dstadr != interface) { - struct interface *prev_dstadr = peer->dstadr; - if (peer->dstadr != NULL) { peer->dstadr->peercnt--; @@ -545,16 +543,6 @@ set_peerdstadr(struct peer *peer, struct interface *interface) 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); @@ -569,7 +557,7 @@ set_peerdstadr(struct peer *peer, struct interface *interface) 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); @@ -607,9 +595,18 @@ peer_refresh_interface(struct peer *peer) } #endif + piface = peer->dstadr; + set_peerdstadr(peer, niface); if (peer->dstadr) { + /* + * clear crypto if we change the local address + */ + if (peer->dstadr != piface) { + peer_crypto_clear(peer); + } + /* * Broadcast needs the socket enabled for broadcast */