]> git.ipfire.org Git - thirdparty/wireguard-tools.git/commitdiff
syncconf: account for persistent keepalive removed from config file
authorJason A. Donenfeld <Jason@zx2c4.com>
Fri, 23 May 2025 18:22:37 +0000 (20:22 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Mon, 23 Feb 2026 22:23:04 +0000 (23:23 +0100)
Otherwise removing a persistent keepalive from a config file wouldn't
reflect on the runtime state.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
src/setconf.c

index 4f830a4a92a1f5436eb06a55d2e31c8fb74d6559..5a0bec00f8d358f115d59ec5a95b770bd669af50 100644 (file)
@@ -91,11 +91,21 @@ static bool sync_conf(struct wgdevice *file)
                        file->first_peer = peer;
                        if (!file->last_peer)
                                file->last_peer = peer;
-               } else if (i < peer_count - 1 && peers[i + 1].from_file &&
-                          (peers[i].peer->flags & WGPEER_HAS_PRESHARED_KEY) && !(peers[i + 1].peer->flags & WGPEER_HAS_PRESHARED_KEY) &&
-                          !memcmp(peers[i].peer->public_key, peers[i + 1].peer->public_key, WG_KEY_LEN)) {
-                       memset(peers[i + 1].peer->preshared_key, 0, WG_KEY_LEN);
-                       peers[i + 1].peer->flags |= WGPEER_HAS_PRESHARED_KEY;
+               } else {
+                       if (i < peer_count - 1 && peers[i + 1].from_file &&
+                           (peers[i].peer->flags & WGPEER_HAS_PRESHARED_KEY) &&
+                           !(peers[i + 1].peer->flags & WGPEER_HAS_PRESHARED_KEY) &&
+                           !memcmp(peers[i].peer->public_key, peers[i + 1].peer->public_key, WG_KEY_LEN)) {
+                               memset(peers[i + 1].peer->preshared_key, 0, WG_KEY_LEN);
+                               peers[i + 1].peer->flags |= WGPEER_HAS_PRESHARED_KEY;
+                       }
+                       if (i < peer_count - 1 && peers[i + 1].from_file &&
+                           peers[i].peer->persistent_keepalive_interval &&
+                           !(peers[i + 1].peer->flags & WGPEER_HAS_PERSISTENT_KEEPALIVE_INTERVAL) &&
+                           !memcmp(peers[i].peer->public_key, peers[i + 1].peer->public_key, WG_KEY_LEN)) {
+                               peers[i + 1].peer->persistent_keepalive_interval = 0;
+                               peers[i + 1].peer->flags |= WGPEER_HAS_PERSISTENT_KEEPALIVE_INTERVAL;
+                       }
                }
        }
        free_wgdevice(runtime);