vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / system / kerberos / default.nix
blob34c7c6c84f865e0cda3ff5e927f38ae020f1e673
1 { config, pkgs, lib, ... }:
3 let
4   inherit (lib) mkOption types;
5   cfg = config.services.kerberos_server;
6   inherit (config.security.krb5) package;
8   format = import ../../../security/krb5/krb5-conf-format.nix { inherit pkgs lib; } { enableKdcACLEntries = true; };
9 in
12   imports = [
13     (lib.mkRenamedOptionModule [ "services" "kerberos_server" "realms" ] [ "services" "kerberos_server" "settings" "realms" ])
15     ./mit.nix
16     ./heimdal.nix
17   ];
19   options = {
20     services.kerberos_server = {
21       enable = lib.mkEnableOption "the kerberos authentication server";
23       settings = mkOption {
24         type = format.type;
25         description = ''
26           Settings for the kerberos server of choice.
28           See the following documentation:
29           - Heimdal: {manpage}`kdc.conf(5)`
30           - MIT Kerberos: <https://web.mit.edu/kerberos/krb5-1.21/doc/admin/conf_files/kdc_conf.html>
31         '';
32         default = { };
33       };
34     };
35   };
37   config = lib.mkIf cfg.enable {
38     environment.systemPackages = [ package ];
39     assertions = [
40       {
41         assertion = cfg.settings.realms != { };
42         message = "The server needs at least one realm";
43       }
44       {
45         assertion = lib.length (lib.attrNames cfg.settings.realms) <= 1;
46         message = "Only one realm per server is currently supported.";
47       }
48     ];
50     systemd.slices.system-kerberos-server = { };
51     systemd.targets.kerberos-server = {
52       wantedBy = [ "multi-user.target" ];
53     };
54   };
56   meta = {
57     doc = ./kerberos-server.md;
58   };