summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau2026-02-20 08:50:44 +0000
committerFelix Fietkau2026-02-20 08:54:41 +0000
commit8f977b4a405533f3613dab716f983ba9500eb3ff (patch)
tree2ffaead7376f86a1e4389fa45b6819b81ba9f5b7
parent6c4c988a5fddbc9560b1d63a3a983647d40f7b63 (diff)
downloadopenwrt-8f977b4a405533f3613dab716f983ba9500eb3ff.tar.gz
wireguard-tools: fix handling of multi-value config options
Config options like addresses and ip6prefix can be passed as either a space-separated string or an array. Add a to_array() helper and use it consistently for all multi-value options (addresses, ip6prefix, allowed_ips). Fixes: https://github.com/openwrt/openwrt/issues/22102 Fixes: 41bc454602f1 ("wireguard-tools: rewrite proto handler in ucode") Signed-off-by: Felix Fietkau <nbd@nbd.name>
-rw-r--r--package/network/utils/wireguard-tools/files/wireguard.uc10
1 files changed, 7 insertions, 3 deletions
diff --git a/package/network/utils/wireguard-tools/files/wireguard.uc b/package/network/utils/wireguard-tools/files/wireguard.uc
index 4d520776c8..c74512909f 100644
--- a/package/network/utils/wireguard-tools/files/wireguard.uc
+++ b/package/network/utils/wireguard-tools/files/wireguard.uc
@@ -30,6 +30,10 @@ function ensure_key_is_generated(cursor, section_name) {
return private_key;
}
+function to_array(val) {
+ return type(val) == 'array' ? val : split(val, /\s+/);
+}
+
function parse_address(addr) {
if (index(addr, ':') >= 0) {
if (index(addr, '/') >= 0) {
@@ -125,7 +129,7 @@ function proto_setup(proto) {
}
if (peer.allowed_ips) {
- let allowed_list = type(peer.allowed_ips) == 'array' ? peer.allowed_ips : split(peer.allowed_ips, ' ');
+ let allowed_list = to_array(peer.allowed_ips);
wg_config += sprintf('AllowedIPs=%s\n', join(', ', allowed_list));
if (peer.route_allowed_ips) {
@@ -166,7 +170,7 @@ function proto_setup(proto) {
let ipv6_addrs = [];
if (config.addresses) {
- let addr_list = split(config.addresses, ' ');
+ let addr_list = to_array(config.addresses);
for (let address in addr_list) {
let addr_info = parse_address(address);
let addr = { ipaddr: addr_info.address, mask: '' + addr_info.mask };
@@ -194,7 +198,7 @@ function proto_setup(proto) {
link_data.routes6 = ipv6_routes;
if (config.ip6prefix) {
- let prefix_list = split(config.ip6prefix, ' ');
+ let prefix_list = to_array(config.ip6prefix);
if (length(prefix_list) > 0)
link_data.ip6prefix = prefix_list;
}