From 918c2ca01aabb31ec2d6c033a14039d0adbe87de Mon Sep 17 00:00:00 2001 From: Christian Kauhaus Date: Fri, 29 Nov 2019 12:08:34 +0100 Subject: [PATCH 1/2] Remove networking.hostConf option This PR is part of the networking.* namespace cleanup. We feel that networking.hostConf is rarely used and provides little value compared to using environment.etc."host.conf" directly. Provide sensible default: multi on --- nixos/modules/config/networking.nix | 17 ++----- nixos/modules/rename.nix | 1 + nixos/tests/resolv.nix | 77 +++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 14 deletions(-) create mode 100644 nixos/tests/resolv.nix diff --git a/nixos/modules/config/networking.nix b/nixos/modules/config/networking.nix index a89667ea221c..3560e579e47c 100644 --- a/nixos/modules/config/networking.nix +++ b/nixos/modules/config/networking.nix @@ -41,19 +41,6 @@ in ''; }; - networking.hostConf = lib.mkOption { - type = types.lines; - default = "multi on"; - example = '' - multi on - reorder on - trim lan - ''; - description = '' - The contents of /etc/host.conf. See also host.conf5. - ''; - }; - networking.timeServers = mkOption { default = [ "0.nixos.pool.ntp.org" @@ -186,7 +173,9 @@ in ''; # /etc/host.conf: resolver configuration file - "host.conf".text = cfg.hostConf; + "host.conf".text = '' + multi on + ''; } // optionalAttrs (pkgs.stdenv.hostPlatform.libc == "glibc") { # /etc/rpc: RPC program numbers. diff --git a/nixos/modules/rename.nix b/nixos/modules/rename.nix index e392fef54dde..83b29613d9c2 100644 --- a/nixos/modules/rename.nix +++ b/nixos/modules/rename.nix @@ -239,6 +239,7 @@ with lib; (mkRemovedOptionModule [ "systemd" "generator-packages" ] "Use systemd.packages instead.") (mkRemovedOptionModule [ "fonts" "enableCoreFonts" ] "Use fonts.fonts = [ pkgs.corefonts ]; instead.") (mkRemovedOptionModule [ "networking" "vpnc" ] "Use environment.etc.\"vpnc/service.conf\" instead.") + (mkRemovedOptionModule [ "networking" "hostConf" ] "Use environment.etc.\"host.conf\" instead.") # ZSH (mkRenamedOptionModule [ "programs" "zsh" "enableSyntaxHighlighting" ] [ "programs" "zsh" "syntaxHighlighting" "enable" ]) diff --git a/nixos/tests/resolv.nix b/nixos/tests/resolv.nix new file mode 100644 index 000000000000..37004bec558c --- /dev/null +++ b/nixos/tests/resolv.nix @@ -0,0 +1,77 @@ +# Test whether DNS resolving returns multiple records and all address families. +import ./make-test-python.nix ({ pkgs, ... } : { + name = "resolv"; + meta = with pkgs.stdenv.lib.maintainers; { + maintainers = [ ckauhaus ]; + }; + + nodes.resolv = { ... }: { + networking.extraHosts = '' + # IPv4 only + 192.0.2.1 host-ipv4.example.net + 192.0.2.2 host-ipv4.example.net + # IP6 only + 2001:db8::2:1 host-ipv6.example.net + 2001:db8::2:2 host-ipv6.example.net + # dual stack + 192.0.2.1 host-dual.example.net + 192.0.2.2 host-dual.example.net + 2001:db8::2:1 host-dual.example.net + 2001:db8::2:2 host-dual.example.net + ''; + }; + + testScript = let + getaddrinfo_py = pkgs.writeScript "getaddrinfo.py" '' + import socket + import sys + + result = set() + for gai in socket.getaddrinfo(sys.argv[1], 0): + result.add(gai[4][0]) + + print(' '.join(sorted(list(result)))) + ''; + + getaddrinfo = "${pkgs.python3.interpreter} ${getaddrinfo_py}"; + + in + '' + def compare(test, should, is_): + should = should.strip() + is_ = is_.strip() + resolv.log("{}: expected '{}', actual '{}'".format(test, should, is_)) + if should == is_: + resolv.log("* OK") + return True + else: + resolv.log("* FAILED") + return False + + + start_all() + resolv.wait_for_unit("nscd") + res = [] + + out = resolv.succeed( + "${getaddrinfo} host-ipv4.example.net" + ) + res.append(compare("resolve IPv4", "192.0.2.1 192.0.2.2", out)) + + out = resolv.succeed( + "${getaddrinfo} host-ipv6.example.net" + ) + res.append(compare("resolve IPv6", "2001:db8::2:1 2001:db8::2:2", out)) + + out = resolv.succeed( + "${getaddrinfo} host-dual.example.net" + ) + res.append( + compare( + "resolve dual stack", "192.0.2.1 192.0.2.2 2001:db8::2:1 2001:db8::2:2", out + ) + ) + + assert all(res) is True + ''; +}) From 8d36536c2e998c4885bbaf25c2f05634b0473405 Mon Sep 17 00:00:00 2001 From: Christian Kauhaus Date: Wed, 4 Dec 2019 11:25:12 +0100 Subject: [PATCH 2/2] Rewrite test script Thanks to @flokli and @tfc --- nixos/tests/resolv.nix | 57 ++++++++++-------------------------------- 1 file changed, 13 insertions(+), 44 deletions(-) diff --git a/nixos/tests/resolv.nix b/nixos/tests/resolv.nix index 37004bec558c..b506f87451ee 100644 --- a/nixos/tests/resolv.nix +++ b/nixos/tests/resolv.nix @@ -21,57 +21,26 @@ import ./make-test-python.nix ({ pkgs, ... } : { ''; }; - testScript = let - getaddrinfo_py = pkgs.writeScript "getaddrinfo.py" '' - import socket - import sys - - result = set() - for gai in socket.getaddrinfo(sys.argv[1], 0): - result.add(gai[4][0]) - - print(' '.join(sorted(list(result)))) - ''; - - getaddrinfo = "${pkgs.python3.interpreter} ${getaddrinfo_py}"; - - in - '' - def compare(test, should, is_): - should = should.strip() - is_ = is_.strip() - resolv.log("{}: expected '{}', actual '{}'".format(test, should, is_)) - if should == is_: - resolv.log("* OK") - return True - else: - resolv.log("* FAILED") - return False + testScript = '' + def addrs_in(hostname, addrs): + res = resolv.succeed("getent ahosts {}".format(hostname)) + for addr in addrs: + assert addr in res, "Expected output '{}' not found in\n{}".format(addr, res) start_all() resolv.wait_for_unit("nscd") - res = [] - out = resolv.succeed( - "${getaddrinfo} host-ipv4.example.net" - ) - res.append(compare("resolve IPv4", "192.0.2.1 192.0.2.2", out)) + ipv4 = ["192.0.2.1", "192.0.2.2"] + ipv6 = ["2001:db8::2:1", "2001:db8::2:2"] - out = resolv.succeed( - "${getaddrinfo} host-ipv6.example.net" - ) - res.append(compare("resolve IPv6", "2001:db8::2:1 2001:db8::2:2", out)) + with subtest("IPv4 resolves"): + addrs_in("host-ipv4.example.net", ipv4) - out = resolv.succeed( - "${getaddrinfo} host-dual.example.net" - ) - res.append( - compare( - "resolve dual stack", "192.0.2.1 192.0.2.2 2001:db8::2:1 2001:db8::2:2", out - ) - ) + with subtest("IPv6 resolves"): + addrs_in("host-ipv6.example.net", ipv6) - assert all(res) is True + with subtest("Dual stack resolves"): + addrs_in("host-dual.example.net", ipv4 + ipv6) ''; })