diff options
author | this-username-has-been-taken <119663930+this-username-has-been-taken@users.noreply.github.com> | 2024-10-23 13:15:33 +0300 |
---|---|---|
committer | Paul Donald <newtwen+github@gmail.com> | 2024-10-23 22:25:27 +0200 |
commit | 7acea818735a9c5e8577d6b57f359996956f15e4 (patch) | |
tree | 1f99b5d9ebeb8b42bc39ffafd663915e01a748dc /protocols/luci-proto-wireguard/root/usr/share/rpcd | |
parent | 13007611a31f14538a88b7360c6dca42ba703fbd (diff) |
luci-proto-wireguard: fixed bug with incorrect peer name detection
Fixed bug with incorrect peer name detection on `Status -> WireGuard`
page when more than one peer with the same public key exist:
1. Peers are now tested not only by public key, but also by
enabled/disabled status, peer host (both IP and FQDN are supported)
and port.
2. Added required `resolveip` dependency.
Closes #7342
Signed-off-by: @this-username-has-been-taken
Signed-off-by: Paul Donald <newtwen+github@gmail.com>
Diffstat (limited to 'protocols/luci-proto-wireguard/root/usr/share/rpcd')
-rw-r--r-- | protocols/luci-proto-wireguard/root/usr/share/rpcd/ucode/luci.wireguard | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/protocols/luci-proto-wireguard/root/usr/share/rpcd/ucode/luci.wireguard b/protocols/luci-proto-wireguard/root/usr/share/rpcd/ucode/luci.wireguard index add810c8ae..c6ae13c94b 100644 --- a/protocols/luci-proto-wireguard/root/usr/share/rpcd/ucode/luci.wireguard +++ b/protocols/luci-proto-wireguard/root/usr/share/rpcd/ucode/luci.wireguard @@ -15,6 +15,19 @@ function command(cmd) { return trim(popen(cmd)?.read?.('all')); } +function checkPeerHost(configHost, configPort, wgHost) { + const ips = popen(`resolveip ${configHost} 2>/dev/null`); + if (ips) { + for (let line = ips.read('line'); length(line); line = ips.read('line')) { + const ip = rtrim(line, '\n'); + if (ip + ":" + configPort == wgHost) { + return true; + } + } + } + return false; +} + const methods = { generatePsk: { @@ -76,7 +89,7 @@ const methods = { let peer_name; uci.foreach('network', `wireguard_${last_device}`, (s) => { - if (s.public_key == record[1]) + if (!s.disabled && s.public_key == record[1] && checkPeerHost(s.endpoint_host, s.endpoint_port, record[3])) peer_name = s.description; }); |