diff options
author | tv <tv@krebsco.de> | 2019-12-02 01:11:37 +0100 |
---|---|---|
committer | tv <tv@krebsco.de> | 2019-12-02 01:11:37 +0100 |
commit | 53fd88bcef4d0cd45de4c4d48e8e282f4b225cba (patch) | |
tree | 7f6b1ecaba5a5a26393b5814869ec27a618d0af2 | |
parent | 7920ebebf0ad119ee07e3ef58c832c9304903d27 (diff) |
iana-etc module: allow adding new services
This fixes a bug which only allowed modifying existing services.
-rw-r--r-- | krebs/3modules/iana-etc.nix | 40 |
1 files changed, 14 insertions, 26 deletions
diff --git a/krebs/3modules/iana-etc.nix b/krebs/3modules/iana-etc.nix index f6d47f27e..e8037128d 100644 --- a/krebs/3modules/iana-etc.nix +++ b/krebs/3modules/iana-etc.nix @@ -23,32 +23,20 @@ with import <stockholm/lib>; }; config.environment.etc = mkIf (config.krebs.iana-etc.services != {}) { - services.source = mkForce (pkgs.runCommand "krebs-iana-etc" {} '' - exec < ${pkgs.iana_etc}/etc/services - exec > $out - awk -F '[ /]+' ' - BEGIN { - port=0 - } - ${concatMapStringsSep "\n" (entry: '' - $2 == ${entry.port} { - port=$2 - next - } - port == ${entry.port} { - ${concatMapStringsSep "\n" - (proto: let - s = "${entry.${proto}.name} ${entry.port}/${proto}"; - in - "print ${toJSON s}") - (filter (proto: entry.${proto} != null) ["tcp" "udp"])} - port=0 - } - '') (attrValues config.krebs.iana-etc.services)} - { - print $0 - } - ' + services.source = mkForce (pkgs.runCommand "krebs-iana-etc" {} /* sh */ '' + { + ${concatMapStringsSep "\n" (entry: /* sh */ '' + ${concatMapStringsSep "\n" + (proto: let + line = "${entry.${proto}.name} ${entry.port}/${proto}"; + in /* sh */ '' + echo ${shell.escape line} + '') + (filter (proto: entry.${proto} != null) ["tcp" "udp"])} + '') (attrValues config.krebs.iana-etc.services)} + cat ${pkgs.iana_etc}/etc/services + } | + sort -b -k 2,2 -u > $out ''); }; |