Unverified Commit daa33a4b authored by Sandro Jäckel's avatar Sandro Jäckel Committed by GitHub
Browse files

Merge pull request #287299 from SuperSandro2000/unbound-checkconf

nixos/unbound: check validity of config file
parents fb0f4579 80e79ded
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -24,12 +24,24 @@ let
  confNoServer = concatStringsSep "\n" ((mapAttrsToList (toConf "") (builtins.removeAttrs cfg.settings [ "server" ])) ++ [""]);
  confServer = concatStringsSep "\n" (mapAttrsToList (toConf "  ") (builtins.removeAttrs cfg.settings.server [ "define-tag" ]));

  confFile = pkgs.writeText "unbound.conf" ''
  confFileUnchecked = pkgs.writeText "unbound.conf" ''
    server:
    ${optionalString (cfg.settings.server.define-tag != "") (toOption "  " "define-tag" cfg.settings.server.define-tag)}
    ${confServer}
    ${confNoServer}
  '';
  confFile = if cfg.checkconf then pkgs.runCommandLocal "unbound-checkconf" { } ''
    cp ${confFileUnchecked} unbound.conf

    # fake stateDir which is not accesible in the sandbox
    mkdir -p $PWD/state
    sed -i unbound.conf \
      -e '/auto-trust-anchor-file/d' \
      -e "s|${cfg.stateDir}|$PWD/state|"
    ${cfg.package}/bin/unbound-checkconf unbound.conf

    cp ${confFileUnchecked} $out
  '' else confFileUnchecked;

  rootTrustAnchorFile = "${cfg.stateDir}/root.key";

@@ -62,6 +74,17 @@ in {
        description = lib.mdDoc "Directory holding all state for unbound to run.";
      };

      checkconf = mkOption {
        type = types.bool;
        default = !cfg.settings ? include;
        defaultText = "!config.services.unbound.settings ? include";
        description = lib.mdDoc ''
          Wether to check the resulting config file with unbound checkconf for syntax errors.

          If settings.include is used, then this options is disabled, as the import can likely not be resolved at build time.
        '';
      };

      resolveLocalQueries = mkOption {
        type = types.bool;
        default = true;