From 0a81a174dbde2371ddcf4b602ba0ecda3c5dbd67 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Fri, 23 May 2025 20:22:37 +0200 Subject: [PATCH] syncconf: account for persistent keepalive removed from config file Otherwise removing a persistent keepalive from a config file wouldn't reflect on the runtime state. Signed-off-by: Jason A. Donenfeld --- src/setconf.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/setconf.c b/src/setconf.c index 4f830a4..5a0bec0 100644 --- a/src/setconf.c +++ b/src/setconf.c @@ -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);