vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / system / kerberos / heimdal.nix
blobcec4dd276e6b9f5808bf46afbd68f3809527041b
1 { pkgs, config, lib, ... } :
3 let
4   inherit (lib)  mapAttrs;
5   cfg = config.services.kerberos_server;
6   package = config.security.krb5.package;
8   aclConfigs = lib.pipe cfg.settings.realms [
9     (mapAttrs (name: { acl, ... }: lib.concatMapStringsSep "\n" (
10       { principal, access, target, ... }:
11       "${principal}\t${lib.concatStringsSep "," (lib.toList access)}\t${target}"
12     ) acl))
13     (lib.mapAttrsToList (name: text:
14       {
15         dbname = "/var/lib/heimdal/heimdal";
16         acl_file = pkgs.writeText "${name}.acl" text;
17       }
18     ))
19   ];
21   finalConfig = cfg.settings // {
22     realms = mapAttrs (_: v: removeAttrs v [ "acl" ]) (cfg.settings.realms or { });
23     kdc = (cfg.settings.kdc or { }) // {
24       database = aclConfigs;
25     };
26   };
28   format = import ../../../security/krb5/krb5-conf-format.nix { inherit pkgs lib; } { enableKdcACLEntries = true; };
30   kdcConfFile = format.generate "kdc.conf" finalConfig;
34   config = lib.mkIf (cfg.enable && package.passthru.implementation == "heimdal") {
35     environment.etc."heimdal-kdc/kdc.conf".source = kdcConfFile;
37     systemd.tmpfiles.settings."10-heimdal" = let
38       databases = lib.pipe finalConfig.kdc.database [
39         (map (dbAttrs: dbAttrs.dbname or null))
40         (lib.filter (x: x != null))
41         lib.unique
42       ];
43     in lib.genAttrs databases (_: {
44       d = {
45         user = "root";
46         group = "root";
47         mode = "0700";
48       };
49     });
51     systemd.services.kadmind = {
52       description = "Kerberos Administration Daemon";
53       partOf = [ "kerberos-server.target" ];
54       wantedBy = [ "kerberos-server.target" ];
55       serviceConfig = {
56         ExecStart = "${package}/libexec/kadmind --config-file=/etc/heimdal-kdc/kdc.conf";
57         Slice = "system-kerberos-server.slice";
58         StateDirectory = "heimdal";
59       };
60       restartTriggers = [ kdcConfFile ];
61     };
63     systemd.services.kdc = {
64       description = "Key Distribution Center daemon";
65       partOf = [ "kerberos-server.target" ];
66       wantedBy = [ "kerberos-server.target" ];
67       serviceConfig = {
68         ExecStart = "${package}/libexec/kdc --config-file=/etc/heimdal-kdc/kdc.conf";
69         Slice = "system-kerberos-server.slice";
70         StateDirectory = "heimdal";
71       };
72       restartTriggers = [ kdcConfFile ];
73     };
75     systemd.services.kpasswdd = {
76       description = "Kerberos Password Changing daemon";
77       partOf = [ "kerberos-server.target" ];
78       wantedBy = [ "kerberos-server.target" ];
79       serviceConfig = {
80         ExecStart = "${package}/libexec/kpasswdd";
81         Slice = "system-kerberos-server.slice";
82         StateDirectory = "heimdal";
83       };
84       restartTriggers = [ kdcConfFile ];
85     };
86   };