vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / system / kerberos / mit.nix
blob9ce58986e27af9ead816c7a6a113eb2c8b0a5bfe
1 { pkgs, config, lib, ... } :
3 let
4   inherit (lib) mapAttrs;
5   cfg = config.services.kerberos_server;
6   package = config.security.krb5.package;
7   PIDFile = "/run/kdc.pid";
9   format = import ../../../security/krb5/krb5-conf-format.nix { inherit pkgs lib; } { enableKdcACLEntries = true; };
11   aclMap = {
12     add = "a"; cpw = "c"; delete = "d"; get = "i"; list = "l"; modify = "m";
13     all = "*";
14   };
16   aclConfigs = lib.pipe cfg.settings.realms [
17     (mapAttrs (name: { acl, ... }: lib.concatMapStringsSep "\n" (
18       { principal, access, target, ... }: let
19         access_code = map (a: aclMap.${a}) (lib.toList access);
20       in "${principal} ${lib.concatStrings access_code} ${target}"
21     ) acl))
23     (lib.concatMapAttrs (name: text: {
24       ${name} = {
25         acl_file = pkgs.writeText "${name}.acl" text;
26       };
27     }))
28   ];
30   finalConfig = cfg.settings // {
31     realms = mapAttrs (n: v: (removeAttrs v [ "acl" ]) // aclConfigs.${n}) (cfg.settings.realms or { });
32   };
34   kdcConfFile = format.generate "kdc.conf" finalConfig;
35   env = {
36     # What Debian uses, could possibly link directly to Nix store?
37     KRB5_KDC_PROFILE = "/etc/krb5kdc/kdc.conf";
38   };
42   config = lib.mkIf (cfg.enable && package.passthru.implementation == "krb5") {
43     environment = {
44       etc."krb5kdc/kdc.conf".source = kdcConfFile;
45       variables = env;
46     };
48     systemd.services.kadmind = {
49       description = "Kerberos Administration Daemon";
50       partOf = [ "kerberos-server.target" ];
51       wantedBy = [ "kerberos-server.target" ];
52       serviceConfig = {
53         ExecStart = "${package}/bin/kadmind -nofork";
54         Slice = "system-kerberos-server.slice";
55         StateDirectory = "krb5kdc";
56       };
57       restartTriggers = [ kdcConfFile ];
58       environment = env;
59     };
61     systemd.services.kdc = {
62       description = "Key Distribution Center daemon";
63       partOf = [ "kerberos-server.target" ];
64       wantedBy = [ "kerberos-server.target" ];
65       serviceConfig = {
66         Type = "forking";
67         PIDFile = PIDFile;
68         ExecStart = "${package}/bin/krb5kdc -P ${PIDFile}";
69         Slice = "system-kerberos-server.slice";
70         StateDirectory = "krb5kdc";
71       };
72       restartTriggers = [ kdcConfFile ];
73       environment = env;
74     };
75   };