mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-13 13:40:28 +03:00
nixos/kerberos_server: use krb format generator, plus misc cleanup
- Introduce more possible options by using the krb format generator. - Enforce package choice is using a correct package. - Use meta attribute to decide implementation, allows for overriding the package. - Make necessary changes to the format, to allow for multiple ACL files in heimdal. - Add systemd target and slice for both implementations. - Move state to `/var/lib` - Add documentation
This commit is contained in:
parent
db4171f3e2
commit
195d155a1c
9 changed files with 278 additions and 139 deletions
|
@ -77,8 +77,22 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
environment = {
|
||||
config = {
|
||||
assertions = mkIf (cfg.enable || config.services.kerberos_server.enable) [(let
|
||||
implementation = cfg.package.passthru.implementation or "<NOT SET>";
|
||||
in {
|
||||
assertion = lib.elem implementation [ "krb5" "heimdal" ];
|
||||
message = ''
|
||||
`security.krb5.package` must be one of:
|
||||
|
||||
- krb5
|
||||
- heimdal
|
||||
|
||||
Currently chosen implementation: ${implementation}
|
||||
'';
|
||||
})];
|
||||
|
||||
environment = mkIf cfg.enable {
|
||||
systemPackages = [ cfg.package ];
|
||||
etc."krb5.conf".source = format.generate "krb5.conf" cfg.settings;
|
||||
};
|
||||
|
|
|
@ -7,17 +7,61 @@
|
|||
let
|
||||
inherit (lib) boolToString concatMapStringsSep concatStringsSep filter
|
||||
isAttrs isBool isList mapAttrsToList mkOption singleton splitString;
|
||||
inherit (lib.types) attrsOf bool coercedTo either int listOf oneOf path
|
||||
str submodule;
|
||||
inherit (lib.types) attrsOf bool coercedTo either enum int listOf oneOf
|
||||
path str submodule;
|
||||
in
|
||||
{ }: {
|
||||
type = let
|
||||
section = attrsOf relation;
|
||||
relation = either (attrsOf value) value;
|
||||
{
|
||||
enableKdcACLEntries ? false
|
||||
}: rec {
|
||||
sectionType = let
|
||||
relation = oneOf [
|
||||
(listOf (attrsOf value))
|
||||
(attrsOf value)
|
||||
value
|
||||
];
|
||||
value = either (listOf atom) atom;
|
||||
atom = oneOf [int str bool];
|
||||
in attrsOf relation;
|
||||
|
||||
type = let
|
||||
aclEntry = submodule {
|
||||
options = {
|
||||
principal = mkOption {
|
||||
type = str;
|
||||
description = "Which principal the rule applies to";
|
||||
};
|
||||
access = mkOption {
|
||||
type = either
|
||||
(listOf (enum ["add" "cpw" "delete" "get" "list" "modify"]))
|
||||
(enum ["all"]);
|
||||
default = "all";
|
||||
description = "The changes the principal is allowed to make.";
|
||||
};
|
||||
target = mkOption {
|
||||
type = str;
|
||||
default = "*";
|
||||
description = "The principals that 'access' applies to.";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
realm = submodule ({ name, ... }: {
|
||||
freeformType = sectionType;
|
||||
options = {
|
||||
acl = mkOption {
|
||||
type = listOf aclEntry;
|
||||
default = [
|
||||
{ principal = "*/admin"; access = "all"; }
|
||||
{ principal = "admin"; access = "all"; }
|
||||
];
|
||||
description = ''
|
||||
The privileges granted to a user.
|
||||
'';
|
||||
};
|
||||
};
|
||||
});
|
||||
in submodule {
|
||||
freeformType = attrsOf section;
|
||||
freeformType = attrsOf sectionType;
|
||||
options = {
|
||||
include = mkOption {
|
||||
default = [ ];
|
||||
|
@ -40,7 +84,17 @@ in
|
|||
'';
|
||||
type = coercedTo path singleton (listOf path);
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
//
|
||||
(lib.optionalAttrs enableKdcACLEntries {
|
||||
realms = mkOption {
|
||||
type = attrsOf realm;
|
||||
description = ''
|
||||
The realm(s) to serve keys for.
|
||||
'';
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
generate = let
|
||||
|
@ -71,6 +125,9 @@ in
|
|||
${name} = {
|
||||
${indent (concatStringsSep "\n" (mapAttrsToList formatValue relation))}
|
||||
}''
|
||||
else if isList relation
|
||||
then
|
||||
concatMapStringsSep "\n" (formatRelation name) relation
|
||||
else formatValue name relation;
|
||||
|
||||
formatValue = name: value:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue