mirror of
https://gitlab.com/simple-nixos-mailserver/nixos-mailserver.git
synced 2025-05-26 04:20:57 +05:00
Merge branch 'dev/user-maildir' into 'master'
Support customized maildir type and location per virtual user See merge request simple-nixos-mailserver/nixos-mailserver!347
This commit is contained in:
commit
4391646489
54
default.nix
54
default.nix
@ -140,6 +140,60 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
customMaildir = mkOption {
|
||||||
|
type = types.nullOr (types.submodule ({ name, ...}: {
|
||||||
|
options = {
|
||||||
|
uid = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
example = 1000;
|
||||||
|
description = ''
|
||||||
|
User ID for files and directories in the maildir. Files and
|
||||||
|
directories created by Dovecot will be assigned this UID.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
gid = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
example = 1000;
|
||||||
|
description = ''
|
||||||
|
Group ID for files and directories in the maildir. Files and
|
||||||
|
directories created by Dovecot will be assigned this GID.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
dovecotHome = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
example = "/home/myusername";
|
||||||
|
description = ''
|
||||||
|
Home directory for Dovecot virtual user. This is used to
|
||||||
|
maintain mail user's private state. This MUST be different
|
||||||
|
for each Dovecot virtual user and MUST be an absolute path.
|
||||||
|
Refer to the Dovecot documentation for further information
|
||||||
|
on this configuration option:
|
||||||
|
https://wiki.dovecot.org/VirtualUsers/Home
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
mailDirectorySpec = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
example = "maildir:~/mail";
|
||||||
|
description = ''
|
||||||
|
Dovecot mail location specification. Refer to the Dovecot
|
||||||
|
documentation for further information on this configuration
|
||||||
|
option:
|
||||||
|
https://doc.dovecot.org/configuration_manual/mail_location/
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}));
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
Configuration options for a custom Maildir location. For instance,
|
||||||
|
this can be used to implement home-directory Maildirs for specific
|
||||||
|
users only. If null, a Maildir under /var/vmail will be assigned.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
sieveScript = mkOption {
|
sieveScript = mkOption {
|
||||||
type = with types; nullOr lines;
|
type = with types; nullOr lines;
|
||||||
default = null;
|
default = null;
|
||||||
|
@ -102,10 +102,36 @@ let
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat <<EOF > ${userdbFile}
|
cat <<EOF > ${userdbFile}
|
||||||
${lib.concatStringsSep "\n" (lib.mapAttrsToList (name: value:
|
${lib.concatStringsSep "\n" (
|
||||||
"${name}:::::::"
|
lib.mapAttrsToList (name: value: let
|
||||||
+ lib.optionalString (value.quota != null) "userdb_quota_rule=*:storage=${value.quota}"
|
# Space-separated "extra fields" options, appended as the 8-th element
|
||||||
) cfg.loginAccounts)}
|
# in a userdb entry tuple in passwd format:
|
||||||
|
# $user:$passwd:$uid:$gid:$uidinfo:$home:$shell:$extraFields
|
||||||
|
extraFieldsStr = lib.concatStringsSep " " (
|
||||||
|
# Custom Maildir location option:
|
||||||
|
(lib.optional
|
||||||
|
(value.customMaildir != null)
|
||||||
|
"userdb_mail=${value.customMaildir.mailDirectorySpec}")
|
||||||
|
++
|
||||||
|
# Quota option:
|
||||||
|
(lib.optional
|
||||||
|
(value.quota != null)
|
||||||
|
"userdb_quota_rule=*:storage=${value.quota}")
|
||||||
|
);
|
||||||
|
in (
|
||||||
|
if value.customMaildir == null then
|
||||||
|
"${name}:::::::${extraFieldsStr}"
|
||||||
|
else
|
||||||
|
"${name}"
|
||||||
|
+ ":"
|
||||||
|
+ ":${builtins.toString value.customMaildir.uid}"
|
||||||
|
+ ":${builtins.toString value.customMaildir.gid}"
|
||||||
|
+ ":"
|
||||||
|
+ ":${value.customMaildir.dovecotHome}"
|
||||||
|
+ ":/run/current-system/sw/bin/nologin"
|
||||||
|
+ ":${extraFieldsStr}"
|
||||||
|
)) cfg.loginAccounts
|
||||||
|
)}
|
||||||
EOF
|
EOF
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user