at 24.11-pre 2.0 kB view raw
1{ pkgs, config, lib, ... } : 2 3let 4 inherit (lib) mkIf concatStringsSep concatMapStrings toList mapAttrs 5 mapAttrsToList; 6 cfg = config.services.kerberos_server; 7 kerberos = config.security.krb5.package; 8 stateDir = "/var/heimdal"; 9 aclFiles = mapAttrs 10 (name: {acl, ...}: pkgs.writeText "${name}.acl" (concatMapStrings (( 11 {principal, access, target, ...} : 12 "${principal}\t${concatStringsSep "," (toList access)}\t${target}\n" 13 )) acl)) cfg.realms; 14 15 kdcConfigs = mapAttrsToList (name: value: '' 16 database = { 17 dbname = ${stateDir}/heimdal 18 acl_file = ${value} 19 } 20 '') aclFiles; 21 kdcConfFile = pkgs.writeText "kdc.conf" '' 22 [kdc] 23 ${concatStringsSep "\n" kdcConfigs} 24 ''; 25in 26 27{ 28 # No documentation about correct triggers, so guessing at them. 29 30 config = mkIf (cfg.enable && kerberos == pkgs.heimdal) { 31 systemd.services.kadmind = { 32 description = "Kerberos Administration Daemon"; 33 wantedBy = [ "multi-user.target" ]; 34 preStart = '' 35 mkdir -m 0755 -p ${stateDir} 36 ''; 37 serviceConfig.ExecStart = 38 "${kerberos}/libexec/kadmind --config-file=/etc/heimdal-kdc/kdc.conf"; 39 restartTriggers = [ kdcConfFile ]; 40 }; 41 42 systemd.services.kdc = { 43 description = "Key Distribution Center daemon"; 44 wantedBy = [ "multi-user.target" ]; 45 preStart = '' 46 mkdir -m 0755 -p ${stateDir} 47 ''; 48 serviceConfig.ExecStart = 49 "${kerberos}/libexec/kdc --config-file=/etc/heimdal-kdc/kdc.conf"; 50 restartTriggers = [ kdcConfFile ]; 51 }; 52 53 systemd.services.kpasswdd = { 54 description = "Kerberos Password Changing daemon"; 55 wantedBy = [ "multi-user.target" ]; 56 preStart = '' 57 mkdir -m 0755 -p ${stateDir} 58 ''; 59 serviceConfig.ExecStart = "${kerberos}/libexec/kpasswdd"; 60 restartTriggers = [ kdcConfFile ]; 61 }; 62 63 environment.etc = { 64 # Can be set via the --config-file option to KDC 65 "heimdal-kdc/kdc.conf".source = kdcConfFile; 66 }; 67 }; 68}