summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimír Čunát <v@cunat.cz>2022-01-05 15:58:27 +0100
committergithub-actions[bot] <github-actions[bot]@users.noreply.github.com>2022-01-11 12:00:57 +0000
commitacbf5b718659d1a4a745e87607535c80a0ae5c36 (patch)
treede4aafb54695981fc4ef86ab77ecfe5336917d14
parentknot-resolver: 5.4.3 -> 5.4.4 (diff)
downloadnixpkgs-origin/backport-153610-to-release-21.11.tar.gz
nixos/kresd: fix IPv6 scope syntaxorigin/backport-153610-to-release-21.11
The systemd syntax is suprising to me, but I suppose it's worth being compatible as people might be sharing it with other modules. Our regexp is lenient on IPv6 address part, so this is actually backwards compatible (i.e. you can put the scope at either place). (cherry picked from commit 180213a0aca0f783fed14e0e71e558693d4cbd0b)
-rw-r--r--nixos/modules/services/networking/kresd.nix9
1 files changed, 5 insertions, 4 deletions
diff --git a/nixos/modules/services/networking/kresd.nix b/nixos/modules/services/networking/kresd.nix
index 3a36ac7e6670..16011573f8bb 100644
--- a/nixos/modules/services/networking/kresd.nix
+++ b/nixos/modules/services/networking/kresd.nix
@@ -7,15 +7,16 @@ let
# Convert systemd-style address specification to kresd config line(s).
# On Nix level we don't attempt to precisely validate the address specifications.
+ # The optional IPv6 scope spec comes *after* port, perhaps surprisingly.
mkListen = kind: addr: let
- al_v4 = builtins.match "([0-9.]+):([0-9]+)" addr;
- al_v6 = builtins.match "\\[(.+)]:([0-9]+)" addr;
+ al_v4 = builtins.match "([0-9.]+):([0-9]+)()" addr;
+ al_v6 = builtins.match "\\[(.+)]:([0-9]+)(%.*|$)" addr;
al_portOnly = builtins.match "([0-9]+)" addr;
al = findFirst (a: a != null)
(throw "services.kresd.*: incorrect address specification '${addr}'")
[ al_v4 al_v6 al_portOnly ];
- port = last al;
- addrSpec = if al_portOnly == null then "'${head al}'" else "{'::', '0.0.0.0'}";
+ port = elemAt al 1;
+ addrSpec = if al_portOnly == null then "'${head al}${elemAt al 2}'" else "{'::', '0.0.0.0'}";
in # freebind is set for compatibility with earlier kresd services;
# it could be configurable, for example.
''