]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
ntp_peer.c:
authorFrank Kardel <kardel@ntp.org>
Sun, 25 Feb 2007 17:21:59 +0000 (17:21 +0000)
committerFrank Kardel <kardel@ntp.org>
Sun, 25 Feb 2007 17:21:59 +0000 (17:21 +0000)
  Bug 789:
    insure that crypto information is only cleared when the local address
    changes. fixes multicast client mode

bk: 45e1c5b7aVU3_MQHPkYSKy4UVHrFsg

ntpd/ntp_peer.c

index 36f316816e0c1e656b6add986bdd00b9be62a72d..e57a4a813918cc748b9b308e7232b77d925e90d3 100644 (file)
@@ -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
                 */