mirror of
https://gitlab.com/simple-nixos-mailserver/nixos-mailserver.git
synced 2025-03-31 07:59:52 +05:00
Support customized maildir type and location per virtual user
This adds the option to add a customized userdb_mail parameter to the Dovecot userdb, overriding the global mail_location setting. This change applies to both mail delivery (handled via LMTP from postfix to Dovecot), as well as Maildir access via IMAP etc. Furthermore, the UID and GID can be customized to reflect the desired permissions. Finally, the Dovecot virtual user home, holding the user's private state, can be set. These changes allow for great flexibility in the mail server setup. For instance, users can selectively have their mail accessible through a Maildir in their home directory, or via a purely virtual user maintained under /var/vmail.
This commit is contained in:
parent
6b425d13f5
commit
51cdb83674
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 {
|
||||
type = with types; nullOr lines;
|
||||
default = null;
|
||||
|
@ -123,12 +123,24 @@ let
|
||||
EOF
|
||||
|
||||
cat <<EOF > ${userdbFile}
|
||||
${lib.concatStringsSep "\n" (lib.mapAttrsToList (name: value:
|
||||
"${name}:::::::"
|
||||
+ (if lib.isString value.quota
|
||||
then "userdb_quota_rule=*:storage=${value.quota}"
|
||||
else "")
|
||||
) cfg.loginAccounts)}
|
||||
${lib.concatStringsSep "\n" (lib.mapAttrsToList (name: value: (
|
||||
if value.customMaildir == null then (
|
||||
"${name}:::::::"
|
||||
) else (
|
||||
"${name}:"
|
||||
+ ":${builtins.toString value.customMaildir.uid}"
|
||||
+ ":${builtins.toString value.customMaildir.gid}"
|
||||
+ ":"
|
||||
+ ":${value.customMaildir.dovecotHome}"
|
||||
+ ":/run/current-system/sw/bin/nologin"
|
||||
+ ":userdb_mail=${value.customMaildir.mailDirectorySpec}"
|
||||
)
|
||||
) + (
|
||||
if lib.isString value.quota then
|
||||
" userdb_quota_rule=*:storage=${value.quota}"
|
||||
else
|
||||
""
|
||||
)) cfg.loginAccounts)}
|
||||
EOF
|
||||
'';
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user