* [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole. @ 2020-08-17 9:27 Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov ` (7 more replies) 0 siblings, 8 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-17 9:27 UTC (permalink / raw) To: 42899 Hi Guix, I did some work on dovecot, and now can run it with sieve/managesieve support. I followed the same aproach NixOS guys did. I patched moduledir in the source code (/etc/dovecot/modules), and provide it as a symlink to current system profiles lib/dovecot. I also added fts plugin support for dovecot, added few more options for sieve protocol configuration. Alexey Abramov (10): gnu: dovecot: Add lucene library to support fts indexing. gnu: dovecot: Patch and provide a static path for module directory. services: dovecot: Use modules via symlink to system profile. gnu: dovecot-pigeonhole: Add new variable. services: dovecot: Serialize global settings first. services: dovecot: Only serialize settings with non-empty values. services: dovecot: Add 'mail-attribute-dict' configuration option. services: dovecot: Add 'imap-metadata?' protocol configuration option. services: dovecot: Add 'managesieve-notify-capability' configuration. services: dovecot: Add 'managesieve-sieve-capability' option. gnu/local.mk | 1 + gnu/packages/mail.scm | 68 +++++++- ...ovecot-use-static-path-for-moduledir.patch | 146 +++++++++++++++++ gnu/services/mail.scm | 151 ++++++++++-------- 4 files changed, 300 insertions(+), 66 deletions(-) create mode 100644 gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch -- 2.27.0 ^ permalink raw reply [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH 01/10] gnu: dovecot: Add lucene library to support fts indexing. 2020-08-17 9:27 [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole Alexey Abramov @ 2020-08-17 9:31 ` Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 02/10] gnu: dovecot: Patch and provide a static path for module directory Alexey Abramov ` (8 more replies) 2020-08-18 12:00 ` [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov ` (6 subsequent siblings) 7 siblings, 9 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-17 9:31 UTC (permalink / raw) To: 42899 * gnu/packages/mail.scm (dovecot)[inputs]: Add ice4c and clucene libraries. * gnu/packages/mail.scm (dovecot)[arguments]: Add --with-lucene configuration switch. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- gnu/packages/mail.scm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 6792b9b4a9..98e75fa90f 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -87,6 +87,7 @@ #:use-module (gnu packages guile-xyz) #:use-module (gnu packages flex) #:use-module (gnu packages haskell-xyz) + #:use-module (gnu packages icu4c) #:use-module (gnu packages kerberos) #:use-module (gnu packages libcanberra) #:use-module (gnu packages libevent) @@ -113,6 +114,7 @@ #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) #:use-module (gnu packages readline) + #:use-module (gnu packages rdf) #:use-module (gnu packages ruby) #:use-module (gnu packages search) #:use-module (gnu packages serialization) @@ -1425,11 +1427,14 @@ facilities for checking incoming mail.") ("lz4" ,lz4) ("openssl" ,openssl) ("sqlite" ,sqlite) - ("zlib" ,zlib))) + ("zlib" ,zlib) + ("icu4c" ,icu4c) + ("clucene" ,clucene))) (arguments `(#:configure-flags '("--sysconfdir=/etc" "--localstatedir=/var" - "--with-sqlite") ; not auto-detected + "--with-sqlite" ; not auto-detected + "--with-lucene") #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-file-names -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH 02/10] gnu: dovecot: Patch and provide a static path for module directory. 2020-08-17 9:31 ` [bug#42899] [PATCH 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov @ 2020-08-17 9:31 ` Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 03/10] services: dovecot: Use modules via symlink to system profile Alexey Abramov ` (7 subsequent siblings) 8 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-17 9:31 UTC (permalink / raw) To: 42899 * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch: New file. * gnu/packages/mail.scm (dovecot)[source]: Use it. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- gnu/local.mk | 1 + gnu/packages/mail.scm | 3 +- ...ovecot-use-static-path-for-moduledir.patch | 146 ++++++++++++++++++ 3 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch diff --git a/gnu/local.mk b/gnu/local.mk index 87bd7094bf..2817deb01f 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -900,6 +900,7 @@ dist_patch_DATA = \ %D%/packages/patches/doc++-include-directives.patch \ %D%/packages/patches/doc++-segfault-fix.patch \ %D%/packages/patches/docker-fix-tests.patch \ + %D%/packages/patches/dovecot-use-static-path-for-moduledir.patch \ %D%/packages/patches/dovecot-trees-support-dovecot-2.3.patch \ %D%/packages/patches/doxygen-test.patch \ %D%/packages/patches/doxygen-1.8.17-runtests.patch \ diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 98e75fa90f..8e7d5b2fc1 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -1411,7 +1411,8 @@ facilities for checking incoming mail.") (version-major+minor version) "/" "dovecot-" version ".tar.gz")) (sha256 - (base32 "1p5gp8jbavcsaara5mfn5cbrnlxssajnchczbgmmfzr7228fmnfk")))) + (base32 "1p5gp8jbavcsaara5mfn5cbrnlxssajnchczbgmmfzr7228fmnfk")) + (patches (search-patches "dovecot-use-static-path-for-moduledir.patch")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) diff --git a/gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch b/gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch new file mode 100644 index 0000000000..da9f4034f4 --- /dev/null +++ b/gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch @@ -0,0 +1,146 @@ +Subject: [PATCH] Use static path for moduledir. + +Patch was taken from NixOS repo. Make dovecot look for plugins in +/etc/dovecot/modules so we can symlink plugins from several packages +there. + +The rational behind the patch can be found here: +https://dovecot.org/pipermail/dovecot/2013-April/089931.html + +--- + src/auth/main.c | 4 ++-- + src/config/config-parser.c | 2 +- + src/config/config-parser.h | 2 +- + src/dict/main.c | 2 +- + src/doveadm/doveadm-util.c | 4 ++-- + src/lib-fs/fs-api.c | 2 +- + src/lib-ssl-iostream/iostream-ssl.c | 4 ++-- + src/lib-storage/mail-storage-settings.c | 2 +- + 9 files changed, 12 insertions(+), 12 deletions(-) + +diff --git a/src/auth/main.c b/src/auth/main.c +index 2dbf9e176..b1e778ab7 100644 +--- a/src/auth/main.c ++++ b/src/auth/main.c +@@ -192,7 +192,7 @@ static void main_preinit(void) + mod_set.debug = global_auth_settings->debug; + mod_set.filter_callback = auth_module_filter; + +- modules = module_dir_load(AUTH_MODULE_DIR, NULL, &mod_set); ++ modules = module_dir_load("/etc/dovecot/modules/auth", NULL, &mod_set); + module_dir_init(modules); + + if (!worker) +@@ -223,7 +223,7 @@ void auth_module_load(const char *names) + mod_set.debug = global_auth_settings->debug; + mod_set.ignore_missing = TRUE; + +- modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, names, ++ modules = module_dir_load_missing(modules, "/etc/dovecot/modules/auth", names, + &mod_set); + module_dir_init(modules); + } +diff --git a/src/config/config-parser.c b/src/config/config-parser.c +index 6894123ea..07e9fecb4 100644 +--- a/src/config/config-parser.c ++++ b/src/config/config-parser.c +@@ -1077,7 +1077,7 @@ void config_parse_load_modules(void) + + i_zero(&mod_set); + mod_set.abi_version = DOVECOT_ABI_VERSION; +- modules = module_dir_load(CONFIG_MODULE_DIR, NULL, &mod_set); ++ modules = module_dir_load("/etc/dovecot/modules/settings", NULL, &mod_set); + module_dir_init(modules); + + i_array_init(&new_roots, 64); +diff --git a/src/config/config-parser.h b/src/config/config-parser.h +index e0a0a5bea..32bd76804 100644 +--- a/src/config/config-parser.h ++++ b/src/config/config-parser.h +@@ -1,7 +1,7 @@ + #ifndef CONFIG_PARSER_H + #define CONFIG_PARSER_H + +-#define CONFIG_MODULE_DIR MODULEDIR"/settings" ++#define CONFIG_MODULE_DIR "/etc/dovecot/modules/settings" + + #define IS_WHITE(c) ((c) == ' ' || (c) == '\t') + +diff --git a/src/dict/main.c b/src/dict/main.c +index 722ed025f..4ed12ae5e 100644 +--- a/src/dict/main.c ++++ b/src/dict/main.c +@@ -104,7 +104,7 @@ static void main_init(void) + mod_set.abi_version = DOVECOT_ABI_VERSION; + mod_set.require_init_funcs = TRUE; + +- modules = module_dir_load(DICT_MODULE_DIR, NULL, &mod_set); ++ modules = module_dir_load("/etc/dovecot/modules/dict", NULL, &mod_set); + module_dir_init(modules); + + /* Register only after loading modules. They may contain SQL drivers, +diff --git a/src/doveadm/doveadm-util.c b/src/doveadm/doveadm-util.c +index a65ef7f72..c19eba06c 100644 +--- a/src/doveadm/doveadm-util.c ++++ b/src/doveadm/doveadm-util.c +@@ -33,7 +33,7 @@ void doveadm_load_modules(void) + mod_set.debug = doveadm_debug; + mod_set.ignore_dlopen_errors = TRUE; + +- modules = module_dir_load_missing(modules, DOVEADM_MODULEDIR, ++ modules = module_dir_load_missing(modules, "/etc/dovecot/modules/doveadm", + NULL, &mod_set); + module_dir_init(modules); + } +@@ -58,7 +58,7 @@ bool doveadm_has_unloaded_plugin(const char *name) + return FALSE; + } + +- dir = opendir(DOVEADM_MODULEDIR); ++ dir = opendir("/etc/dovecot/modules/doveadm"); + if (dir == NULL) + return FALSE; + +diff --git a/src/lib-fs/fs-api.c b/src/lib-fs/fs-api.c +index a939f612d..846cf86e6 100644 +--- a/src/lib-fs/fs-api.c ++++ b/src/lib-fs/fs-api.c +@@ -114,7 +114,7 @@ static void fs_class_try_load_plugin(const char *driver) + mod_set.abi_version = DOVECOT_ABI_VERSION; + mod_set.ignore_missing = TRUE; + +- fs_modules = module_dir_load_missing(fs_modules, MODULE_DIR, ++ fs_modules = module_dir_load_missing(fs_modules, "/etc/dovecot/modules", + module_name, &mod_set); + module_dir_init(fs_modules); + +diff --git a/src/lib-ssl-iostream/iostream-ssl.c b/src/lib-ssl-iostream/iostream-ssl.c +index f62c80d37..900ab46c4 100644 +--- a/src/lib-ssl-iostream/iostream-ssl.c ++++ b/src/lib-ssl-iostream/iostream-ssl.c +@@ -54,8 +54,8 @@ int ssl_module_load(const char **error_r) + mod_set.abi_version = DOVECOT_ABI_VERSION; + mod_set.setting_name = "<built-in lib-ssl-iostream lookup>"; + mod_set.require_init_funcs = TRUE; +- ssl_module = module_dir_load(MODULE_DIR, plugin_name, &mod_set); +- if (module_dir_try_load_missing(&ssl_module, MODULE_DIR, plugin_name, ++ ssl_module = module_dir_load("/etc/dovecot/modules", plugin_name, &mod_set); ++ if (module_dir_try_load_missing(&ssl_module, "/etc/dovecot/modules", plugin_name, + &mod_set, error_r) < 0) + return -1; + module_dir_init(ssl_module); +diff --git a/src/lib-storage/mail-storage-settings.c b/src/lib-storage/mail-storage-settings.c +index b314b529c..705509456 100644 +--- a/src/lib-storage/mail-storage-settings.c ++++ b/src/lib-storage/mail-storage-settings.c +@@ -337,7 +337,7 @@ static const struct mail_user_settings mail_user_default_settings = { + .last_valid_gid = 0, + + .mail_plugins = "", +- .mail_plugin_dir = MODULEDIR, ++ .mail_plugin_dir = "/etc/dovecot/modules", + + .mail_log_prefix = "%s(%u)<%{pid}><%{session}>: ", + +-- +2.27.0 -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH 03/10] services: dovecot: Use modules via symlink to system profile. 2020-08-17 9:31 ` [bug#42899] [PATCH 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 02/10] gnu: dovecot: Patch and provide a static path for module directory Alexey Abramov @ 2020-08-17 9:31 ` Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 04/10] gnu: dovecot-pigeonhole: Add new variable Alexey Abramov ` (6 subsequent siblings) 8 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-17 9:31 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (%dovecot-activation): Link the location with multiple plugins (dovecot-pigeonhole, etc), to a place where dovecot can find them. * gnu/services/mail.scm (dovecot-configuration): Use the symlink. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- gnu/services/mail.scm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index cfcaf4601b..da17933d6b 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -1044,7 +1044,7 @@ directories are prefixed with the chroot directory, append \"/.\" to This is used by imap (for shared users) and lda.") (mail-plugin-dir - (file-name "/usr/lib/dovecot") + (file-name "/etc/dovecot/modules") "Directory where to look up mail plugins.") (mail-plugins @@ -1519,13 +1519,16 @@ greyed out, instead of only later giving \"not selectable\" popup error. (else (format (current-error-port) "Failed to create public key at ~a.\n" public-key))))) - (let ((user (getpwnam "dovecot"))) + (let ((user (getpwnam "dovecot")) + (moduledir "/etc/dovecot/modules")) (mkdir-p/perms "/var/run/dovecot" user #o755) (mkdir-p/perms "/var/lib/dovecot" user #o755) (mkdir-p/perms "/etc/dovecot" user #o755) (copy-file #$(plain-file "dovecot.conf" config-str) "/etc/dovecot/dovecot.conf") (mkdir-p/perms "/etc/dovecot/private" user #o700) + (unless (file-exists? moduledir) + (symlink "/run/current-system/profile/lib/dovecot" moduledir)) (create-self-signed-certificate-if-absent #:private-key "/etc/dovecot/private/default.pem" #:public-key "/etc/dovecot/default.pem" -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH 04/10] gnu: dovecot-pigeonhole: Add new variable. 2020-08-17 9:31 ` [bug#42899] [PATCH 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 02/10] gnu: dovecot: Patch and provide a static path for module directory Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 03/10] services: dovecot: Use modules via symlink to system profile Alexey Abramov @ 2020-08-17 9:31 ` Alexey Abramov 2020-08-26 4:23 ` Tobias Geerinckx-Rice via Guix-patches via 2020-08-17 9:31 ` [bug#42899] [PATCH 05/10] services: dovecot: Serialize global settings first Alexey Abramov ` (5 subsequent siblings) 8 siblings, 1 reply; 61+ messages in thread From: Alexey Abramov @ 2020-08-17 9:31 UTC (permalink / raw) To: 42899 Signed-off-by: Alexey Abramov <levenson@mmer.org> --- gnu/packages/mail.scm | 56 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 8e7d5b2fc1..25e9570958 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -1467,6 +1467,62 @@ It supports mbox/Maildir and its own dbox/mdbox formats.") (license (list license:lgpl2.1 license:expat (license:non-copyleft "file://COPYING"))))) +(define-public dovecot-pigeonhole + (let ((dovecot-version (version-major+minor (package-version dovecot)))) + (package + (name "dovecot-pigeonhole") + (version "0.5.11") + (source + (origin + (method url-fetch) + (uri (string-append "https://pigeonhole.dovecot.org/releases/" + dovecot-version "/" + "dovecot-" dovecot-version "-pigeonhole-" version ".tar.gz")) + (sha256 + (base32 + "1w5mryv6izh1gv7davnl94rb0pvh5bxl2bydzbfla1b83x22m5qb")))) + (build-system gnu-build-system) + (native-inputs + `(("automake" ,automake) + ("autoconf" ,autoconf) + ("libtool" ,libtool) + ("pkg-config" ,pkg-config) + ("gettext" ,gettext-minimal) + ("dovecot" ,dovecot))) + (arguments + `(#:configure-flags + (list "--with-dovecot-install-dirs=no" + (string-append "--with-dovecot=" + (assoc-ref %build-inputs "dovecot") + "/lib/dovecot") + (string-append "--with-moduledir=" + (assoc-ref %outputs "out") + "/lib/dovecot")) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-file-names + (lambda _ + (let ((out (assoc-ref %outputs "out"))) + (substitute* "src/managesieve/managesieve-settings.c" + ((".executable = \"managesieve\"") + (string-append ".executable = \"" out "/libexec/dovecot/managesieve\""))) + (substitute* "src/managesieve-login/managesieve-login-settings.c" + ((".executable = \"managesieve-login\"") + (string-append ".executable = \"" out "/libexec/dovecot/managesieve-login\"")))) + #t))))) + (home-page "https://pigeonhole.dovecot.org") + (synopsis "Pigeonhole project provides mail filtering facilities using +the Sieve language") + (description + "@code{dovecot-pigonhole} adds support for the Sieve +language (RFC 5228) and the ManageSieve protocol (RFC 5804) to the +@code{Dovecot} Secure IMAP Server.") + ;; Pigeonhole is open source and distributed under the same + ;; license as Dovecot: LGPL v2.1 + (license (list license:lgpl2.1 + (license:non-copyleft "file://COPYING") + (license:non-copyleft "file://COPYING.LGPL")))))) + (define-public dovecot-trees (package (name "dovecot-trees") -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH 04/10] gnu: dovecot-pigeonhole: Add new variable. 2020-08-17 9:31 ` [bug#42899] [PATCH 04/10] gnu: dovecot-pigeonhole: Add new variable Alexey Abramov @ 2020-08-26 4:23 ` Tobias Geerinckx-Rice via Guix-patches via 0 siblings, 0 replies; 61+ messages in thread From: Tobias Geerinckx-Rice via Guix-patches via @ 2020-08-26 4:23 UTC (permalink / raw) To: Alexey Abramov; +Cc: 42899 [-- Attachment #1: Type: text/plain, Size: 287 bytes --] Alexey, Alexey Abramov 写道: > Signed-off-by: Alexey Abramov <levenson@mmer.org> No need to sign of on your own patches. > +(define-public dovecot-pigeonhole I've applied these patches on my mail server and will enjoy testing them. Thanks! Kind regards, T G-R [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 227 bytes --] ^ permalink raw reply [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH 05/10] services: dovecot: Serialize global settings first. 2020-08-17 9:31 ` [bug#42899] [PATCH 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov ` (2 preceding siblings ...) 2020-08-17 9:31 ` [bug#42899] [PATCH 04/10] gnu: dovecot-pigeonhole: Add new variable Alexey Abramov @ 2020-08-17 9:31 ` Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 06/10] services: dovecot: Only serialize settings with non-empty values Alexey Abramov ` (4 subsequent siblings) 8 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-17 9:31 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (dovecot-configuration): To avoid dovecot warning messages, move serialization of protocol settings below the global one. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- gnu/services/mail.scm | 118 +++++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index da17933d6b..5959d878e7 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -479,64 +479,6 @@ interfaces. If you want to specify non-default ports or anything more complex, customize the address and port fields of the @samp{inet-listener} of the specific services you are interested in.") - (protocols - (protocol-configuration-list - (list (protocol-configuration - (name "imap")))) - "List of protocols we want to serve. Available protocols include -@samp{imap}, @samp{pop3}, and @samp{lmtp}.") - - (services - (service-configuration-list - (list - (service-configuration - (kind "imap-login") - (client-limit 0) - (process-limit 0) - (listeners - (list - (inet-listener-configuration (protocol "imap") (port 143) (ssl? #f)) - (inet-listener-configuration (protocol "imaps") (port 993) (ssl? #t))))) - (service-configuration - (kind "pop3-login") - (listeners - (list - (inet-listener-configuration (protocol "pop3") (port 110) (ssl? #f)) - (inet-listener-configuration (protocol "pop3s") (port 995) (ssl? #t))))) - (service-configuration - (kind "lmtp") - (client-limit 1) - (process-limit 0) - (listeners - (list (unix-listener-configuration (path "lmtp") (mode "0666"))))) - (service-configuration - (kind "imap") - (client-limit 1) - (process-limit 1024)) - (service-configuration - (kind "pop3") - (client-limit 1) - (process-limit 1024)) - (service-configuration - (kind "auth") - (service-count 0) - (client-limit 0) - (process-limit 1) - (listeners - (list (unix-listener-configuration (path "auth-userdb"))))) - (service-configuration - (kind "auth-worker") - (client-limit 1) - (process-limit 0)) - (service-configuration - (kind "dict") - (client-limit 1) - (process-limit 0) - (listeners (list (unix-listener-configuration (path "dict"))))))) - "List of services to enable. Available services include @samp{imap}, -@samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and -@samp{lmtp}.") - (dict (dict-configuration (dict-configuration)) "Dict configuration, as created by the @code{dict-configuration} @@ -1430,7 +1372,65 @@ greyed out, instead of only later giving \"not selectable\" popup error. (imap-urlauth-host (string "") - "Host allowed in URLAUTH URLs sent by client. \"*\" allows all.") ) + "Host allowed in URLAUTH URLs sent by client. \"*\" allows all.") + + (protocols + (protocol-configuration-list + (list (protocol-configuration + (name "imap")))) + "List of protocols we want to serve. Available protocols include +@samp{imap}, @samp{pop3}, and @samp{lmtp}.") + + (services + (service-configuration-list + (list + (service-configuration + (kind "imap-login") + (client-limit 0) + (process-limit 0) + (listeners + (list + (inet-listener-configuration (protocol "imap") (port 143) (ssl? #f)) + (inet-listener-configuration (protocol "imaps") (port 993) (ssl? #t))))) + (service-configuration + (kind "pop3-login") + (listeners + (list + (inet-listener-configuration (protocol "pop3") (port 110) (ssl? #f)) + (inet-listener-configuration (protocol "pop3s") (port 995) (ssl? #t))))) + (service-configuration + (kind "lmtp") + (client-limit 1) + (process-limit 0) + (listeners + (list (unix-listener-configuration (path "lmtp") (mode "0666"))))) + (service-configuration + (kind "imap") + (client-limit 1) + (process-limit 1024)) + (service-configuration + (kind "pop3") + (client-limit 1) + (process-limit 1024)) + (service-configuration + (kind "auth") + (service-count 0) + (client-limit 0) + (process-limit 1) + (listeners + (list (unix-listener-configuration (path "auth-userdb"))))) + (service-configuration + (kind "auth-worker") + (client-limit 1) + (process-limit 0)) + (service-configuration + (kind "dict") + (client-limit 1) + (process-limit 0) + (listeners (list (unix-listener-configuration (path "dict"))))))) + "List of services to enable. Available services include @samp{imap}, +@samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and +@samp{lmtp}.")) (define-configuration opaque-dovecot-configuration (dovecot -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH 06/10] services: dovecot: Only serialize settings with non-empty values. 2020-08-17 9:31 ` [bug#42899] [PATCH 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov ` (3 preceding siblings ...) 2020-08-17 9:31 ` [bug#42899] [PATCH 05/10] services: dovecot: Serialize global settings first Alexey Abramov @ 2020-08-17 9:31 ` Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 07/10] services: dovecot: Add 'mail-attribute-dict' configuration option Alexey Abramov ` (3 subsequent siblings) 8 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-17 9:31 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (serialize-space-separated-string-list): Protocols might have custom settings, which are not supported by other protocols. To prevent dovecot/services from crashing, serialize settings that hold non-empty values only. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- gnu/services/mail.scm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 5959d878e7..1d5d322a53 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -99,7 +99,9 @@ (and (string? x) (not (string-index x #\space)))) val))) (define (serialize-space-separated-string-list field-name val) - (serialize-field field-name (string-join val " "))) + (match val + (() #f) + (_ (serialize-field field-name (string-join val " "))))) (define (comma-separated-string-list? val) (and (list? val) -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH 07/10] services: dovecot: Add 'mail-attribute-dict' configuration option. 2020-08-17 9:31 ` [bug#42899] [PATCH 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov ` (4 preceding siblings ...) 2020-08-17 9:31 ` [bug#42899] [PATCH 06/10] services: dovecot: Only serialize settings with non-empty values Alexey Abramov @ 2020-08-17 9:31 ` Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 08/10] services: dovecot: Add 'imap-metadata?' protocol " Alexey Abramov ` (2 subsequent siblings) 8 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-17 9:31 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (dovecot-configuration): Define 'mail-attribute-dict' directive to support IMAP METADATA extension.: Signed-off-by: Alexey Abramov <levenson@mmer.org> --- gnu/services/mail.scm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 1d5d322a53..f2b9774bfd 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -1126,6 +1126,11 @@ disabled.") @samp{mdbox-rotate-size}. This setting currently works only in Linux with some file systems (ext4, xfs).") + (mail-attribute-dict + (string "file:%h/dovecot-attributes") + "Activate the metadata storage of @code{IMAP METADATA} extension (RFC 5464), which allows +per-mailbox, per-user data to be stored and accessed via IMAP commands.") + (mail-attachment-dir (string "") "sdbox and mdbox support saving mail attachments to external files, -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH 08/10] services: dovecot: Add 'imap-metadata?' protocol configuration option. 2020-08-17 9:31 ` [bug#42899] [PATCH 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov ` (5 preceding siblings ...) 2020-08-17 9:31 ` [bug#42899] [PATCH 07/10] services: dovecot: Add 'mail-attribute-dict' configuration option Alexey Abramov @ 2020-08-17 9:31 ` Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 09/10] services: dovecot: Add 'managesieve-notify-capability' configuration Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 10/10] services: dovecot: Add 'managesieve-sieve-capability' option Alexey Abramov 8 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-17 9:31 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (protocol-configuration): Define the option to be able to activate the IMAP METADATA commands over the imap protocol. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- gnu/services/mail.scm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index f2b9774bfd..27ba532338 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -348,7 +348,10 @@ This is used by imap (for shared users) and lda.") (mail-max-userip-connections (non-negative-integer 10) "Maximum number of IMAP connections allowed for a user from each IP -address. NOTE: The username is compared case-sensitively.")) +address. NOTE: The username is compared case-sensitively.") + (imap-metadata? + (boolean #f) + "Activate the commands of @code{IMAP METADATA} extension (RFC 5464).")) (define (serialize-protocol-configuration field-name val) (format #t "protocol ~a {\n" (protocol-configuration-name val)) -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH 09/10] services: dovecot: Add 'managesieve-notify-capability' configuration. 2020-08-17 9:31 ` [bug#42899] [PATCH 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov ` (6 preceding siblings ...) 2020-08-17 9:31 ` [bug#42899] [PATCH 08/10] services: dovecot: Add 'imap-metadata?' protocol " Alexey Abramov @ 2020-08-17 9:31 ` Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 10/10] services: dovecot: Add 'managesieve-sieve-capability' option Alexey Abramov 8 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-17 9:31 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (protocol-configuration): Define new option for protocol-configuration. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- gnu/services/mail.scm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 27ba532338..4b208646b6 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -351,7 +351,13 @@ This is used by imap (for shared users) and lda.") address. NOTE: The username is compared case-sensitively.") (imap-metadata? (boolean #f) - "Activate the commands of @code{IMAP METADATA} extension (RFC 5464).")) + "Activate the commands of @code{IMAP METADATA} extension (RFC 5464).") + (managesieve-notify-capability + (space-separated-string-list '()) + "Define NOTIFY capabilities reported by the ManageSieve +service before authentication. If left unassigned, these will be assigned +dynamically according to what the Sieve interpreter supports by default (after +login this may differ depending on the authenticated user)")) (define (serialize-protocol-configuration field-name val) (format #t "protocol ~a {\n" (protocol-configuration-name val)) -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH 10/10] services: dovecot: Add 'managesieve-sieve-capability' option. 2020-08-17 9:31 ` [bug#42899] [PATCH 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov ` (7 preceding siblings ...) 2020-08-17 9:31 ` [bug#42899] [PATCH 09/10] services: dovecot: Add 'managesieve-notify-capability' configuration Alexey Abramov @ 2020-08-17 9:31 ` Alexey Abramov 8 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-17 9:31 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (protocol-configuration): Define it. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- gnu/services/mail.scm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 4b208646b6..7024356842 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -357,6 +357,12 @@ address. NOTE: The username is compared case-sensitively.") "Define NOTIFY capabilities reported by the ManageSieve service before authentication. If left unassigned, these will be assigned dynamically according to what the Sieve interpreter supports by default (after +login this may differ depending on the authenticated user)") + (managesieve-sieve-capability + (space-separated-string-list '()) + "Define SIEVE capabilities reported by the ManageSieve +service before authentication. If left unassigned, these will be assigned +dynamically according to what the Sieve interpreter supports by default (after login this may differ depending on the authenticated user)")) (define (serialize-protocol-configuration field-name val) -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing. 2020-08-17 9:27 [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov @ 2020-08-18 12:00 ` Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 02/10] gnu: dovecot: Patch and provide a static path for module directory Alexey Abramov ` (8 more replies) 2020-08-23 21:23 ` [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole Efraim Flashner ` (5 subsequent siblings) 7 siblings, 9 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-18 12:00 UTC (permalink / raw) To: 42899 * gnu/packages/mail.scm (dovecot)[inputs]: Add ice4c and clucene libraries. * gnu/packages/mail.scm (dovecot)[arguments]: Add --with-lucene configuration switch. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- gnu/packages/mail.scm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 6792b9b4a9..98e75fa90f 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -87,6 +87,7 @@ #:use-module (gnu packages guile-xyz) #:use-module (gnu packages flex) #:use-module (gnu packages haskell-xyz) + #:use-module (gnu packages icu4c) #:use-module (gnu packages kerberos) #:use-module (gnu packages libcanberra) #:use-module (gnu packages libevent) @@ -113,6 +114,7 @@ #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) #:use-module (gnu packages readline) + #:use-module (gnu packages rdf) #:use-module (gnu packages ruby) #:use-module (gnu packages search) #:use-module (gnu packages serialization) @@ -1425,11 +1427,14 @@ facilities for checking incoming mail.") ("lz4" ,lz4) ("openssl" ,openssl) ("sqlite" ,sqlite) - ("zlib" ,zlib))) + ("zlib" ,zlib) + ("icu4c" ,icu4c) + ("clucene" ,clucene))) (arguments `(#:configure-flags '("--sysconfdir=/etc" "--localstatedir=/var" - "--with-sqlite") ; not auto-detected + "--with-sqlite" ; not auto-detected + "--with-lucene") #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-file-names -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v2 02/10] gnu: dovecot: Patch and provide a static path for module directory. 2020-08-18 12:00 ` [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov @ 2020-08-18 12:00 ` Alexey Abramov 2020-08-19 7:41 ` Efraim Flashner 2020-08-18 12:00 ` [bug#42899] [PATCH v2 03/10] services: dovecot: Use modules via symlink to system profile Alexey Abramov ` (7 subsequent siblings) 8 siblings, 1 reply; 61+ messages in thread From: Alexey Abramov @ 2020-08-18 12:00 UTC (permalink / raw) To: 42899 * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch: New file. * gnu/packages/mail.scm (dovecot)[source]: Use it. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- gnu/local.mk | 1 + gnu/packages/mail.scm | 3 +- ...ovecot-use-static-path-for-moduledir.patch | 146 ++++++++++++++++++ 3 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch diff --git a/gnu/local.mk b/gnu/local.mk index 87bd7094bf..2817deb01f 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -900,6 +900,7 @@ dist_patch_DATA = \ %D%/packages/patches/doc++-include-directives.patch \ %D%/packages/patches/doc++-segfault-fix.patch \ %D%/packages/patches/docker-fix-tests.patch \ + %D%/packages/patches/dovecot-use-static-path-for-moduledir.patch \ %D%/packages/patches/dovecot-trees-support-dovecot-2.3.patch \ %D%/packages/patches/doxygen-test.patch \ %D%/packages/patches/doxygen-1.8.17-runtests.patch \ diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 98e75fa90f..8e7d5b2fc1 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -1411,7 +1411,8 @@ facilities for checking incoming mail.") (version-major+minor version) "/" "dovecot-" version ".tar.gz")) (sha256 - (base32 "1p5gp8jbavcsaara5mfn5cbrnlxssajnchczbgmmfzr7228fmnfk")))) + (base32 "1p5gp8jbavcsaara5mfn5cbrnlxssajnchczbgmmfzr7228fmnfk")) + (patches (search-patches "dovecot-use-static-path-for-moduledir.patch")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) diff --git a/gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch b/gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch new file mode 100644 index 0000000000..da9f4034f4 --- /dev/null +++ b/gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch @@ -0,0 +1,146 @@ +Subject: [PATCH] Use static path for moduledir. + +Patch was taken from NixOS repo. Make dovecot look for plugins in +/etc/dovecot/modules so we can symlink plugins from several packages +there. + +The rational behind the patch can be found here: +https://dovecot.org/pipermail/dovecot/2013-April/089931.html + +--- + src/auth/main.c | 4 ++-- + src/config/config-parser.c | 2 +- + src/config/config-parser.h | 2 +- + src/dict/main.c | 2 +- + src/doveadm/doveadm-util.c | 4 ++-- + src/lib-fs/fs-api.c | 2 +- + src/lib-ssl-iostream/iostream-ssl.c | 4 ++-- + src/lib-storage/mail-storage-settings.c | 2 +- + 9 files changed, 12 insertions(+), 12 deletions(-) + +diff --git a/src/auth/main.c b/src/auth/main.c +index 2dbf9e176..b1e778ab7 100644 +--- a/src/auth/main.c ++++ b/src/auth/main.c +@@ -192,7 +192,7 @@ static void main_preinit(void) + mod_set.debug = global_auth_settings->debug; + mod_set.filter_callback = auth_module_filter; + +- modules = module_dir_load(AUTH_MODULE_DIR, NULL, &mod_set); ++ modules = module_dir_load("/etc/dovecot/modules/auth", NULL, &mod_set); + module_dir_init(modules); + + if (!worker) +@@ -223,7 +223,7 @@ void auth_module_load(const char *names) + mod_set.debug = global_auth_settings->debug; + mod_set.ignore_missing = TRUE; + +- modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, names, ++ modules = module_dir_load_missing(modules, "/etc/dovecot/modules/auth", names, + &mod_set); + module_dir_init(modules); + } +diff --git a/src/config/config-parser.c b/src/config/config-parser.c +index 6894123ea..07e9fecb4 100644 +--- a/src/config/config-parser.c ++++ b/src/config/config-parser.c +@@ -1077,7 +1077,7 @@ void config_parse_load_modules(void) + + i_zero(&mod_set); + mod_set.abi_version = DOVECOT_ABI_VERSION; +- modules = module_dir_load(CONFIG_MODULE_DIR, NULL, &mod_set); ++ modules = module_dir_load("/etc/dovecot/modules/settings", NULL, &mod_set); + module_dir_init(modules); + + i_array_init(&new_roots, 64); +diff --git a/src/config/config-parser.h b/src/config/config-parser.h +index e0a0a5bea..32bd76804 100644 +--- a/src/config/config-parser.h ++++ b/src/config/config-parser.h +@@ -1,7 +1,7 @@ + #ifndef CONFIG_PARSER_H + #define CONFIG_PARSER_H + +-#define CONFIG_MODULE_DIR MODULEDIR"/settings" ++#define CONFIG_MODULE_DIR "/etc/dovecot/modules/settings" + + #define IS_WHITE(c) ((c) == ' ' || (c) == '\t') + +diff --git a/src/dict/main.c b/src/dict/main.c +index 722ed025f..4ed12ae5e 100644 +--- a/src/dict/main.c ++++ b/src/dict/main.c +@@ -104,7 +104,7 @@ static void main_init(void) + mod_set.abi_version = DOVECOT_ABI_VERSION; + mod_set.require_init_funcs = TRUE; + +- modules = module_dir_load(DICT_MODULE_DIR, NULL, &mod_set); ++ modules = module_dir_load("/etc/dovecot/modules/dict", NULL, &mod_set); + module_dir_init(modules); + + /* Register only after loading modules. They may contain SQL drivers, +diff --git a/src/doveadm/doveadm-util.c b/src/doveadm/doveadm-util.c +index a65ef7f72..c19eba06c 100644 +--- a/src/doveadm/doveadm-util.c ++++ b/src/doveadm/doveadm-util.c +@@ -33,7 +33,7 @@ void doveadm_load_modules(void) + mod_set.debug = doveadm_debug; + mod_set.ignore_dlopen_errors = TRUE; + +- modules = module_dir_load_missing(modules, DOVEADM_MODULEDIR, ++ modules = module_dir_load_missing(modules, "/etc/dovecot/modules/doveadm", + NULL, &mod_set); + module_dir_init(modules); + } +@@ -58,7 +58,7 @@ bool doveadm_has_unloaded_plugin(const char *name) + return FALSE; + } + +- dir = opendir(DOVEADM_MODULEDIR); ++ dir = opendir("/etc/dovecot/modules/doveadm"); + if (dir == NULL) + return FALSE; + +diff --git a/src/lib-fs/fs-api.c b/src/lib-fs/fs-api.c +index a939f612d..846cf86e6 100644 +--- a/src/lib-fs/fs-api.c ++++ b/src/lib-fs/fs-api.c +@@ -114,7 +114,7 @@ static void fs_class_try_load_plugin(const char *driver) + mod_set.abi_version = DOVECOT_ABI_VERSION; + mod_set.ignore_missing = TRUE; + +- fs_modules = module_dir_load_missing(fs_modules, MODULE_DIR, ++ fs_modules = module_dir_load_missing(fs_modules, "/etc/dovecot/modules", + module_name, &mod_set); + module_dir_init(fs_modules); + +diff --git a/src/lib-ssl-iostream/iostream-ssl.c b/src/lib-ssl-iostream/iostream-ssl.c +index f62c80d37..900ab46c4 100644 +--- a/src/lib-ssl-iostream/iostream-ssl.c ++++ b/src/lib-ssl-iostream/iostream-ssl.c +@@ -54,8 +54,8 @@ int ssl_module_load(const char **error_r) + mod_set.abi_version = DOVECOT_ABI_VERSION; + mod_set.setting_name = "<built-in lib-ssl-iostream lookup>"; + mod_set.require_init_funcs = TRUE; +- ssl_module = module_dir_load(MODULE_DIR, plugin_name, &mod_set); +- if (module_dir_try_load_missing(&ssl_module, MODULE_DIR, plugin_name, ++ ssl_module = module_dir_load("/etc/dovecot/modules", plugin_name, &mod_set); ++ if (module_dir_try_load_missing(&ssl_module, "/etc/dovecot/modules", plugin_name, + &mod_set, error_r) < 0) + return -1; + module_dir_init(ssl_module); +diff --git a/src/lib-storage/mail-storage-settings.c b/src/lib-storage/mail-storage-settings.c +index b314b529c..705509456 100644 +--- a/src/lib-storage/mail-storage-settings.c ++++ b/src/lib-storage/mail-storage-settings.c +@@ -337,7 +337,7 @@ static const struct mail_user_settings mail_user_default_settings = { + .last_valid_gid = 0, + + .mail_plugins = "", +- .mail_plugin_dir = MODULEDIR, ++ .mail_plugin_dir = "/etc/dovecot/modules", + + .mail_log_prefix = "%s(%u)<%{pid}><%{session}>: ", + +-- +2.27.0 -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v2 02/10] gnu: dovecot: Patch and provide a static path for module directory. 2020-08-18 12:00 ` [bug#42899] [PATCH v2 02/10] gnu: dovecot: Patch and provide a static path for module directory Alexey Abramov @ 2020-08-19 7:41 ` Efraim Flashner 2020-08-19 9:44 ` Alexey Abramov 0 siblings, 1 reply; 61+ messages in thread From: Efraim Flashner @ 2020-08-19 7:41 UTC (permalink / raw) To: Alexey Abramov; +Cc: 42899 [-- Attachment #1: Type: text/plain, Size: 8731 bytes --] How are all the XXX_MODULE_DIR variables set? Would it be possible to just set MODULE_DIR to /etc/dovecot/modules and leave the others as-is? They seem to just use a file/folder under MODULE_DIR. On Tue, Aug 18, 2020 at 02:00:30PM +0200, Alexey Abramov wrote: > * gnu/local.mk (dist_patch_DATA): Add it. > * gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch: New file. > * gnu/packages/mail.scm (dovecot)[source]: Use it. > > Signed-off-by: Alexey Abramov <levenson@mmer.org> > --- > gnu/local.mk | 1 + > gnu/packages/mail.scm | 3 +- > ...ovecot-use-static-path-for-moduledir.patch | 146 ++++++++++++++++++ > 3 files changed, 149 insertions(+), 1 deletion(-) > create mode 100644 gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch > > diff --git a/gnu/local.mk b/gnu/local.mk > index 87bd7094bf..2817deb01f 100644 > --- a/gnu/local.mk > +++ b/gnu/local.mk > @@ -900,6 +900,7 @@ dist_patch_DATA = \ > %D%/packages/patches/doc++-include-directives.patch \ > %D%/packages/patches/doc++-segfault-fix.patch \ > %D%/packages/patches/docker-fix-tests.patch \ > + %D%/packages/patches/dovecot-use-static-path-for-moduledir.patch \ > %D%/packages/patches/dovecot-trees-support-dovecot-2.3.patch \ > %D%/packages/patches/doxygen-test.patch \ > %D%/packages/patches/doxygen-1.8.17-runtests.patch \ > diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm > index 98e75fa90f..8e7d5b2fc1 100644 > --- a/gnu/packages/mail.scm > +++ b/gnu/packages/mail.scm > @@ -1411,7 +1411,8 @@ facilities for checking incoming mail.") > (version-major+minor version) "/" > "dovecot-" version ".tar.gz")) > (sha256 > - (base32 "1p5gp8jbavcsaara5mfn5cbrnlxssajnchczbgmmfzr7228fmnfk")))) > + (base32 "1p5gp8jbavcsaara5mfn5cbrnlxssajnchczbgmmfzr7228fmnfk")) > + (patches (search-patches "dovecot-use-static-path-for-moduledir.patch")))) > (build-system gnu-build-system) > (native-inputs > `(("pkg-config" ,pkg-config))) > diff --git a/gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch b/gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch > new file mode 100644 > index 0000000000..da9f4034f4 > --- /dev/null > +++ b/gnu/packages/patches/dovecot-use-static-path-for-moduledir.patch > @@ -0,0 +1,146 @@ > +Subject: [PATCH] Use static path for moduledir. > + > +Patch was taken from NixOS repo. Make dovecot look for plugins in > +/etc/dovecot/modules so we can symlink plugins from several packages > +there. > + > +The rational behind the patch can be found here: > +https://dovecot.org/pipermail/dovecot/2013-April/089931.html > + > +--- > + src/auth/main.c | 4 ++-- > + src/config/config-parser.c | 2 +- > + src/config/config-parser.h | 2 +- > + src/dict/main.c | 2 +- > + src/doveadm/doveadm-util.c | 4 ++-- > + src/lib-fs/fs-api.c | 2 +- > + src/lib-ssl-iostream/iostream-ssl.c | 4 ++-- > + src/lib-storage/mail-storage-settings.c | 2 +- > + 9 files changed, 12 insertions(+), 12 deletions(-) > + > +diff --git a/src/auth/main.c b/src/auth/main.c > +index 2dbf9e176..b1e778ab7 100644 > +--- a/src/auth/main.c > ++++ b/src/auth/main.c > +@@ -192,7 +192,7 @@ static void main_preinit(void) > + mod_set.debug = global_auth_settings->debug; > + mod_set.filter_callback = auth_module_filter; > + > +- modules = module_dir_load(AUTH_MODULE_DIR, NULL, &mod_set); > ++ modules = module_dir_load("/etc/dovecot/modules/auth", NULL, &mod_set); > + module_dir_init(modules); > + > + if (!worker) > +@@ -223,7 +223,7 @@ void auth_module_load(const char *names) > + mod_set.debug = global_auth_settings->debug; > + mod_set.ignore_missing = TRUE; > + > +- modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, names, > ++ modules = module_dir_load_missing(modules, "/etc/dovecot/modules/auth", names, > + &mod_set); > + module_dir_init(modules); > + } > +diff --git a/src/config/config-parser.c b/src/config/config-parser.c > +index 6894123ea..07e9fecb4 100644 > +--- a/src/config/config-parser.c > ++++ b/src/config/config-parser.c > +@@ -1077,7 +1077,7 @@ void config_parse_load_modules(void) > + > + i_zero(&mod_set); > + mod_set.abi_version = DOVECOT_ABI_VERSION; > +- modules = module_dir_load(CONFIG_MODULE_DIR, NULL, &mod_set); > ++ modules = module_dir_load("/etc/dovecot/modules/settings", NULL, &mod_set); > + module_dir_init(modules); > + > + i_array_init(&new_roots, 64); > +diff --git a/src/config/config-parser.h b/src/config/config-parser.h > +index e0a0a5bea..32bd76804 100644 > +--- a/src/config/config-parser.h > ++++ b/src/config/config-parser.h > +@@ -1,7 +1,7 @@ > + #ifndef CONFIG_PARSER_H > + #define CONFIG_PARSER_H > + > +-#define CONFIG_MODULE_DIR MODULEDIR"/settings" > ++#define CONFIG_MODULE_DIR "/etc/dovecot/modules/settings" > + > + #define IS_WHITE(c) ((c) == ' ' || (c) == '\t') > + > +diff --git a/src/dict/main.c b/src/dict/main.c > +index 722ed025f..4ed12ae5e 100644 > +--- a/src/dict/main.c > ++++ b/src/dict/main.c > +@@ -104,7 +104,7 @@ static void main_init(void) > + mod_set.abi_version = DOVECOT_ABI_VERSION; > + mod_set.require_init_funcs = TRUE; > + > +- modules = module_dir_load(DICT_MODULE_DIR, NULL, &mod_set); > ++ modules = module_dir_load("/etc/dovecot/modules/dict", NULL, &mod_set); > + module_dir_init(modules); > + > + /* Register only after loading modules. They may contain SQL drivers, > +diff --git a/src/doveadm/doveadm-util.c b/src/doveadm/doveadm-util.c > +index a65ef7f72..c19eba06c 100644 > +--- a/src/doveadm/doveadm-util.c > ++++ b/src/doveadm/doveadm-util.c > +@@ -33,7 +33,7 @@ void doveadm_load_modules(void) > + mod_set.debug = doveadm_debug; > + mod_set.ignore_dlopen_errors = TRUE; > + > +- modules = module_dir_load_missing(modules, DOVEADM_MODULEDIR, > ++ modules = module_dir_load_missing(modules, "/etc/dovecot/modules/doveadm", > + NULL, &mod_set); > + module_dir_init(modules); > + } > +@@ -58,7 +58,7 @@ bool doveadm_has_unloaded_plugin(const char *name) > + return FALSE; > + } > + > +- dir = opendir(DOVEADM_MODULEDIR); > ++ dir = opendir("/etc/dovecot/modules/doveadm"); > + if (dir == NULL) > + return FALSE; > + > +diff --git a/src/lib-fs/fs-api.c b/src/lib-fs/fs-api.c > +index a939f612d..846cf86e6 100644 > +--- a/src/lib-fs/fs-api.c > ++++ b/src/lib-fs/fs-api.c > +@@ -114,7 +114,7 @@ static void fs_class_try_load_plugin(const char *driver) > + mod_set.abi_version = DOVECOT_ABI_VERSION; > + mod_set.ignore_missing = TRUE; > + > +- fs_modules = module_dir_load_missing(fs_modules, MODULE_DIR, > ++ fs_modules = module_dir_load_missing(fs_modules, "/etc/dovecot/modules", > + module_name, &mod_set); > + module_dir_init(fs_modules); > + > +diff --git a/src/lib-ssl-iostream/iostream-ssl.c b/src/lib-ssl-iostream/iostream-ssl.c > +index f62c80d37..900ab46c4 100644 > +--- a/src/lib-ssl-iostream/iostream-ssl.c > ++++ b/src/lib-ssl-iostream/iostream-ssl.c > +@@ -54,8 +54,8 @@ int ssl_module_load(const char **error_r) > + mod_set.abi_version = DOVECOT_ABI_VERSION; > + mod_set.setting_name = "<built-in lib-ssl-iostream lookup>"; > + mod_set.require_init_funcs = TRUE; > +- ssl_module = module_dir_load(MODULE_DIR, plugin_name, &mod_set); > +- if (module_dir_try_load_missing(&ssl_module, MODULE_DIR, plugin_name, > ++ ssl_module = module_dir_load("/etc/dovecot/modules", plugin_name, &mod_set); > ++ if (module_dir_try_load_missing(&ssl_module, "/etc/dovecot/modules", plugin_name, > + &mod_set, error_r) < 0) > + return -1; > + module_dir_init(ssl_module); > +diff --git a/src/lib-storage/mail-storage-settings.c b/src/lib-storage/mail-storage-settings.c > +index b314b529c..705509456 100644 > +--- a/src/lib-storage/mail-storage-settings.c > ++++ b/src/lib-storage/mail-storage-settings.c > +@@ -337,7 +337,7 @@ static const struct mail_user_settings mail_user_default_settings = { > + .last_valid_gid = 0, > + > + .mail_plugins = "", > +- .mail_plugin_dir = MODULEDIR, > ++ .mail_plugin_dir = "/etc/dovecot/modules", > + > + .mail_log_prefix = "%s(%u)<%{pid}><%{session}>: ", > + > +-- > +2.27.0 > -- > 2.27.0 > > > > -- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v2 02/10] gnu: dovecot: Patch and provide a static path for module directory. 2020-08-19 7:41 ` Efraim Flashner @ 2020-08-19 9:44 ` Alexey Abramov 2020-08-23 20:45 ` Efraim Flashner 0 siblings, 1 reply; 61+ messages in thread From: Alexey Abramov @ 2020-08-19 9:44 UTC (permalink / raw) To: Efraim Flashner; +Cc: 42899 Hi, Efraim Flashner <efraim@flashner.co.il> writes: > How are all the XXX_MODULE_DIR variables set? Would it be possible to > just set MODULE_DIR to /etc/dovecot/modules and leave the others as-is? > They seem to just use a file/folder under MODULE_DIR. They set during compilation time. If I pass it as a configuration option, dovecot will try to install libraries there which won't work. For example: --8<---------------cut here---------------start------------->8--- -*- mode: rg; default-directory: "~/factory/dovecot/" -*- rg started at Wed Aug 19 10:35:00 /gnu/store/cxy9n8aic4c9zd0r372m6b6yzw3dhcyl-ripgrep-12.1.1/bin/rg --color always --colors match:fg:red -n --type-add gn\:\*.gn --type-add gn\:\*.gni --type-add gyp\:\*.gyp --type-add gyp\:\*.gypi --no-heading --type all -e AUTH_MODULE_DIR src/auth/Makefile.am:42: -DAUTH_MODULE_DIR=\""$(auth_moduledir)"\" \ src/auth/main.c:195: modules = module_dir_load(AUTH_MODULE_DIR, NULL, &mod_set); src/auth/main.c:226: modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, names, src/doveadm/doveadm-pw.c:40: modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, NULL, &mod_set); src/doveadm/Makefile.am:28: -DAUTH_MODULE_DIR=\""$(moduledir)/auth"\" \ rg finished (5 matches found) at Wed Aug 19 10:35:00 --8<---------------cut here---------------end--------------->8--- --8<---------------cut here---------------start------------->8--- -*- mode: rg; default-directory: "~/factory/dovecot/" -*- rg started at Wed Aug 19 11:33:25 /gnu/store/cxy9n8aic4c9zd0r372m6b6yzw3dhcyl-ripgrep-12.1.1/bin/rg --color always --colors match:fg:red -n --type-add gn\:\*.gn --type-add gn\:\*.gni --type-add gyp\:\*.gyp --type-add gyp\:\*.gypi --no-heading --type all -e DOVEADM_MODULEDIR src/doveadm/doveadm-util.c:36: modules = module_dir_load_missing(modules, DOVEADM_MODULEDIR, src/doveadm/doveadm-util.c:61: dir = opendir(DOVEADM_MODULEDIR); src/doveadm/Makefile.am:29: -DDOVEADM_MODULEDIR=\""$(doveadm_moduledir)"\" \ rg finished (3 matches found) at Wed Aug 19 11:33:25 --8<---------------cut here---------------end--------------->8--- -- Alexey ^ permalink raw reply [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v2 02/10] gnu: dovecot: Patch and provide a static path for module directory. 2020-08-19 9:44 ` Alexey Abramov @ 2020-08-23 20:45 ` Efraim Flashner 2020-08-24 10:01 ` Alexey Abramov 0 siblings, 1 reply; 61+ messages in thread From: Efraim Flashner @ 2020-08-23 20:45 UTC (permalink / raw) To: Alexey Abramov; +Cc: 42899 [-- Attachment #1.1: Type: text/plain, Size: 2742 bytes --] On Wed, Aug 19, 2020 at 11:44:20AM +0200, Alexey Abramov wrote: > Hi, > > Efraim Flashner <efraim@flashner.co.il> writes: > > > How are all the XXX_MODULE_DIR variables set? Would it be possible to > > just set MODULE_DIR to /etc/dovecot/modules and leave the others as-is? > > They seem to just use a file/folder under MODULE_DIR. > > They set during compilation time. If I pass it as a configuration option, dovecot will try to install libraries there which won't work. This was enough to jog my memory that we have a couple of packages (with services) that have configure flags for one directory and install to %outputs as expected. I came up with the attached patch to make that happen. > > For example: > > --8<---------------cut here---------------start------------->8--- > -*- mode: rg; default-directory: "~/factory/dovecot/" -*- > rg started at Wed Aug 19 10:35:00 > > /gnu/store/cxy9n8aic4c9zd0r372m6b6yzw3dhcyl-ripgrep-12.1.1/bin/rg --color always --colors match:fg:red -n --type-add gn\:\*.gn --type-add gn\:\*.gni --type-add gyp\:\*.gyp --type-add gyp\:\*.gypi --no-heading --type all -e AUTH_MODULE_DIR > > src/auth/Makefile.am:42: -DAUTH_MODULE_DIR=\""$(auth_moduledir)"\" \ > src/auth/main.c:195: modules = module_dir_load(AUTH_MODULE_DIR, NULL, &mod_set); > src/auth/main.c:226: modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, names, > src/doveadm/doveadm-pw.c:40: modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, NULL, &mod_set); > src/doveadm/Makefile.am:28: -DAUTH_MODULE_DIR=\""$(moduledir)/auth"\" \ > > rg finished (5 matches found) at Wed Aug 19 10:35:00 > --8<---------------cut here---------------end--------------->8--- > > --8<---------------cut here---------------start------------->8--- > -*- mode: rg; default-directory: "~/factory/dovecot/" -*- > rg started at Wed Aug 19 11:33:25 > > /gnu/store/cxy9n8aic4c9zd0r372m6b6yzw3dhcyl-ripgrep-12.1.1/bin/rg --color always --colors match:fg:red -n --type-add gn\:\*.gn --type-add gn\:\*.gni --type-add gyp\:\*.gyp --type-add gyp\:\*.gypi --no-heading --type all -e DOVEADM_MODULEDIR > > src/doveadm/doveadm-util.c:36: modules = module_dir_load_missing(modules, DOVEADM_MODULEDIR, > src/doveadm/doveadm-util.c:61: dir = opendir(DOVEADM_MODULEDIR); > src/doveadm/Makefile.am:29: -DDOVEADM_MODULEDIR=\""$(doveadm_moduledir)"\" \ > > rg finished (3 matches found) at Wed Aug 19 11:33:25 > --8<---------------cut here---------------end--------------->8--- > > -- > Alexey -- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #1.2: 0001-gnu-dovecot-Set-moduledir-to-global-directory.patch --] [-- Type: text/plain, Size: 1976 bytes --] From e4dd3230739bca94896343d64c6756d346016296 Mon Sep 17 00:00:00 2001 From: Efraim Flashner <efraim@flashner.co.il> Date: Sun, 23 Aug 2020 23:43:43 +0300 Subject: [PATCH] gnu: dovecot: Set moduledir to global directory. * gnu/packages/mail.scm (dovecot)[arguments]: Add configure-flag to set moduledir. Adjust custom 'install phase to override moduledir so it successfully installs. --- gnu/packages/mail.scm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 01ba9dc057..d3d1bda1b6 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -1442,7 +1442,8 @@ facilities for checking incoming mail.") `(#:configure-flags '("--sysconfdir=/etc" "--localstatedir=/var" "--with-sqlite" ; not auto-detected - "--with-lucene") + "--with-lucene" + "--with-moduledir=/etc/dovecot/modules") #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-file-names @@ -1459,9 +1460,13 @@ facilities for checking incoming mail.") (("cat") (which "cat"))) #t)) (replace 'install - (lambda* (#:key make-flags #:allow-other-keys) + (lambda* (#:key outputs make-flags #:allow-other-keys) + ;; The .la files don't like having the moduledir moved. + (for-each delete-file (find-files "." "\\.la")) ;; Simple hack to avoid installing a trivial README in /etc. (apply invoke "make" "install" "sysconfdir=/tmp/bogus" + (string-append "moduledir=" (assoc-ref outputs "out") + "/lib/dovecot") make-flags)))))) (home-page "https://www.dovecot.org") (synopsis "Secure POP3/IMAP server") -- 2.28.0 [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v2 02/10] gnu: dovecot: Patch and provide a static path for module directory. 2020-08-23 20:45 ` Efraim Flashner @ 2020-08-24 10:01 ` Alexey Abramov 0 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-24 10:01 UTC (permalink / raw) To: Efraim Flashner; +Cc: 42899 Efraim Flashner <efraim@flashner.co.il> writes: > On Wed, Aug 19, 2020 at 11:44:20AM +0200, Alexey Abramov wrote: >> Hi, >> >> Efraim Flashner <efraim@flashner.co.il> writes: >> >> > How are all the XXX_MODULE_DIR variables set? Would it be possible to >> > just set MODULE_DIR to /etc/dovecot/modules and leave the others as-is? >> > They seem to just use a file/folder under MODULE_DIR. >> >> They set during compilation time. If I pass it as a configuration option, dovecot will try to install libraries there which won't work. > > This was enough to jog my memory that we have a couple of packages (with > services) that have configure flags for one directory and install to > %outputs as expected. I came up with the attached patch to make that > happen. Thank you very much! I have just tested it, and as you might probably know everything works as expected. I will push your updated patch as soon as guys review the services part. -- Alexey ^ permalink raw reply [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v2 03/10] services: dovecot: Use modules via symlink to system profile. 2020-08-18 12:00 ` [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 02/10] gnu: dovecot: Patch and provide a static path for module directory Alexey Abramov @ 2020-08-18 12:00 ` Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 04/10] gnu: dovecot-pigeonhole: Add new variable Alexey Abramov ` (6 subsequent siblings) 8 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-18 12:00 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (%dovecot-activation): Link the location with multiple plugins (dovecot-pigeonhole, etc), to a place where dovecot can find them. * gnu/services/mail.scm (dovecot-configuration): Use the symlink. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- doc/guix.texi | 9 +++++++-- gnu/services/mail.scm | 13 ++++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index e0c138533f..9f803fdbac 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -18333,8 +18333,13 @@ Defaults to @samp{"/var/run/dovecot/auth-userdb"}. @end deftypevr @deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir -Directory where to look up mail plugins. -Defaults to @samp{"/usr/lib/dovecot"}. +Directory where to look up mail plugins. In Guix, dovecot plugins have +all its modules under /gnu/store/xxx-plugin/(lib|libexec)/dovecot. To be +able to load all those modules by doveconf or services like sieve, +@samp{mail-plugin-dir} is a symlink "/run/current-system/profile/lib/dovecot", +which creates during the activation step. + +Defaults to @samp{"/etc/dovecot/modules"}. @end deftypevr @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index cfcaf4601b..2832303d88 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -1044,8 +1044,12 @@ directories are prefixed with the chroot directory, append \"/.\" to This is used by imap (for shared users) and lda.") (mail-plugin-dir - (file-name "/usr/lib/dovecot") - "Directory where to look up mail plugins.") + (file-name "/etc/dovecot/modules") + "Directory where to look up mail plugins. In Guix, dovecot plugins have +all its modules under /gnu/store/xxx-plugin/(lib|libexec)/dovecot. To be able +to load all those modules by doveconf or services like imap, +@samp{mail-plugin-dir} is a symlink `/run/current-system/profile/lib/dovecot`, +which creates during the activation step.") (mail-plugins (space-separated-string-list '()) @@ -1519,13 +1523,16 @@ greyed out, instead of only later giving \"not selectable\" popup error. (else (format (current-error-port) "Failed to create public key at ~a.\n" public-key))))) - (let ((user (getpwnam "dovecot"))) + (let ((user (getpwnam "dovecot")) + (moduledir "/etc/dovecot/modules")) (mkdir-p/perms "/var/run/dovecot" user #o755) (mkdir-p/perms "/var/lib/dovecot" user #o755) (mkdir-p/perms "/etc/dovecot" user #o755) (copy-file #$(plain-file "dovecot.conf" config-str) "/etc/dovecot/dovecot.conf") (mkdir-p/perms "/etc/dovecot/private" user #o700) + (unless (file-exists? moduledir) + (symlink "/run/current-system/profile/lib/dovecot" moduledir)) (create-self-signed-certificate-if-absent #:private-key "/etc/dovecot/private/default.pem" #:public-key "/etc/dovecot/default.pem" -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v2 04/10] gnu: dovecot-pigeonhole: Add new variable. 2020-08-18 12:00 ` [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 02/10] gnu: dovecot: Patch and provide a static path for module directory Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 03/10] services: dovecot: Use modules via symlink to system profile Alexey Abramov @ 2020-08-18 12:00 ` Alexey Abramov 2020-08-23 21:16 ` Efraim Flashner 2020-08-18 12:00 ` [bug#42899] [PATCH v2 05/10] services: dovecot: Serialize global settings first Alexey Abramov ` (5 subsequent siblings) 8 siblings, 1 reply; 61+ messages in thread From: Alexey Abramov @ 2020-08-18 12:00 UTC (permalink / raw) To: 42899 Signed-off-by: Alexey Abramov <levenson@mmer.org> --- gnu/packages/mail.scm | 56 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 8e7d5b2fc1..25e9570958 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -1467,6 +1467,62 @@ It supports mbox/Maildir and its own dbox/mdbox formats.") (license (list license:lgpl2.1 license:expat (license:non-copyleft "file://COPYING"))))) +(define-public dovecot-pigeonhole + (let ((dovecot-version (version-major+minor (package-version dovecot)))) + (package + (name "dovecot-pigeonhole") + (version "0.5.11") + (source + (origin + (method url-fetch) + (uri (string-append "https://pigeonhole.dovecot.org/releases/" + dovecot-version "/" + "dovecot-" dovecot-version "-pigeonhole-" version ".tar.gz")) + (sha256 + (base32 + "1w5mryv6izh1gv7davnl94rb0pvh5bxl2bydzbfla1b83x22m5qb")))) + (build-system gnu-build-system) + (native-inputs + `(("automake" ,automake) + ("autoconf" ,autoconf) + ("libtool" ,libtool) + ("pkg-config" ,pkg-config) + ("gettext" ,gettext-minimal) + ("dovecot" ,dovecot))) + (arguments + `(#:configure-flags + (list "--with-dovecot-install-dirs=no" + (string-append "--with-dovecot=" + (assoc-ref %build-inputs "dovecot") + "/lib/dovecot") + (string-append "--with-moduledir=" + (assoc-ref %outputs "out") + "/lib/dovecot")) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-file-names + (lambda _ + (let ((out (assoc-ref %outputs "out"))) + (substitute* "src/managesieve/managesieve-settings.c" + ((".executable = \"managesieve\"") + (string-append ".executable = \"" out "/libexec/dovecot/managesieve\""))) + (substitute* "src/managesieve-login/managesieve-login-settings.c" + ((".executable = \"managesieve-login\"") + (string-append ".executable = \"" out "/libexec/dovecot/managesieve-login\"")))) + #t))))) + (home-page "https://pigeonhole.dovecot.org") + (synopsis "Pigeonhole project provides mail filtering facilities using +the Sieve language") + (description + "@code{dovecot-pigonhole} adds support for the Sieve +language (RFC 5228) and the ManageSieve protocol (RFC 5804) to the +@code{Dovecot} Secure IMAP Server.") + ;; Pigeonhole is open source and distributed under the same + ;; license as Dovecot: LGPL v2.1 + (license (list license:lgpl2.1 + (license:non-copyleft "file://COPYING") + (license:non-copyleft "file://COPYING.LGPL")))))) + (define-public dovecot-trees (package (name "dovecot-trees") -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v2 04/10] gnu: dovecot-pigeonhole: Add new variable. 2020-08-18 12:00 ` [bug#42899] [PATCH v2 04/10] gnu: dovecot-pigeonhole: Add new variable Alexey Abramov @ 2020-08-23 21:16 ` Efraim Flashner 2020-08-24 10:47 ` Alexey Abramov 0 siblings, 1 reply; 61+ messages in thread From: Efraim Flashner @ 2020-08-23 21:16 UTC (permalink / raw) To: Alexey Abramov; +Cc: 42899 [-- Attachment #1: Type: text/plain, Size: 4553 bytes --] Make sure you run 'guix lint' on the package, some of the lines are too long. On Tue, Aug 18, 2020 at 02:00:32PM +0200, Alexey Abramov wrote: > Signed-off-by: Alexey Abramov <levenson@mmer.org> > --- > gnu/packages/mail.scm | 56 +++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 56 insertions(+) > > diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm > index 8e7d5b2fc1..25e9570958 100644 > --- a/gnu/packages/mail.scm > +++ b/gnu/packages/mail.scm > @@ -1467,6 +1467,62 @@ It supports mbox/Maildir and its own dbox/mdbox formats.") > (license (list license:lgpl2.1 license:expat > (license:non-copyleft "file://COPYING"))))) > > +(define-public dovecot-pigeonhole > + (let ((dovecot-version (version-major+minor (package-version dovecot)))) > + (package > + (name "dovecot-pigeonhole") > + (version "0.5.11") > + (source > + (origin > + (method url-fetch) > + (uri (string-append "https://pigeonhole.dovecot.org/releases/" > + dovecot-version "/" > + "dovecot-" dovecot-version "-pigeonhole-" version ".tar.gz")) Is there a difference between dovecot-2.3-pigeonhole-0.5.11.tar.gz and dovecot-2.3.11-pigeonhole-0.5.11.tar.gz? > + (sha256 > + (base32 > + "1w5mryv6izh1gv7davnl94rb0pvh5bxl2bydzbfla1b83x22m5qb")))) > + (build-system gnu-build-system) > + (native-inputs > + `(("automake" ,automake) > + ("autoconf" ,autoconf) > + ("libtool" ,libtool) > + ("pkg-config" ,pkg-config) > + ("gettext" ,gettext-minimal) > + ("dovecot" ,dovecot))) it doesn't looke like automake, autoconf, libtool or gettext are necessary here. Also, 'guix gc --references' show a reference to dovecot, so that should go in inputs. > + (arguments > + `(#:configure-flags > + (list "--with-dovecot-install-dirs=no" > + (string-append "--with-dovecot=" > + (assoc-ref %build-inputs "dovecot") > + "/lib/dovecot") > + (string-append "--with-moduledir=" > + (assoc-ref %outputs "out") > + "/lib/dovecot")) > + #:phases > + (modify-phases %standard-phases > + (add-after 'unpack 'patch-file-names > + (lambda _ If you change the lambda to (lambda* (#:key outputs #:allow-other-keys) then you can change the let to (let ((out (assoc-ref outputs "out"))) and it fits better with the code formatting in the rest of Guix. > + (let ((out (assoc-ref %outputs "out"))) > + (substitute* "src/managesieve/managesieve-settings.c" > + ((".executable = \"managesieve\"") > + (string-append ".executable = \"" out "/libexec/dovecot/managesieve\""))) > + (substitute* "src/managesieve-login/managesieve-login-settings.c" > + ((".executable = \"managesieve-login\"") > + (string-append ".executable = \"" out "/libexec/dovecot/managesieve-login\"")))) Some of these lines are too long. We try to wrap them at 80, and the linter complains once it hits 90. If you start a new line after 'out' then it should flow nicely. > + #t))))) > + (home-page "https://pigeonhole.dovecot.org") > + (synopsis "Pigeonhole project provides mail filtering facilities using > +the Sieve language") I would shorten this to 'Mail filtering in Dovecot using the Sieve language' > + (description > + "@code{dovecot-pigonhole} adds support for the Sieve > +language (RFC 5228) and the ManageSieve protocol (RFC 5804) to the > +@code{Dovecot} Secure IMAP Server.") > + ;; Pigeonhole is open source and distributed under the same > + ;; license as Dovecot: LGPL v2.1 > + (license (list license:lgpl2.1 > + (license:non-copyleft "file://COPYING") > + (license:non-copyleft "file://COPYING.LGPL")))))) It looked to me like it was just lgpl2.1 > + > (define-public dovecot-trees > (package > (name "dovecot-trees") > -- > 2.27.0 > > > > -- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v2 04/10] gnu: dovecot-pigeonhole: Add new variable. 2020-08-23 21:16 ` Efraim Flashner @ 2020-08-24 10:47 ` Alexey Abramov 0 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-24 10:47 UTC (permalink / raw) To: Efraim Flashner; +Cc: 42899 [-- Attachment #1: Type: text/plain, Size: 2781 bytes --] Efraim Flashner <efraim@flashner.co.il> writes: > Make sure you run 'guix lint' on the package, some of the lines are too > long. > [...] > > Is there a difference between dovecot-2.3-pigeonhole-0.5.11.tar.gz and > dovecot-2.3.11-pigeonhole-0.5.11.tar.gz? Hm, I didn't even know that you can download the latter one. I used the URL provided from the [1] Anyways, I have downloaded both of them and did a check. Most of the differences relate to Makefile.in, however I also found that the ChangeLog file from "2.3" is newer then "2.3.11". The latter miss one change. Please see the diff I have attached. So I guess we should use dovecot-2.3-pigeonhole-0.5.11.tar.gz. > [...] > > it doesn't looke like automake, autoconf, libtool or gettext are > necessary here. Also, 'guix gc --references' show a reference to > dovecot, so that should go in inputs. It is indeed not required. I removed native-imports completely and everithing builds OK. I also moved dovecot to inputs, checked 'guix gc --references', but it turned out that it shows dovecot anyways. ,----[ guix gc --references /gnu/store/c6lnlfqh0jxkrz1x8mk7gdpx15iffxqd-dovecot-pigeonhole-0.5.11/ ] | /gnu/store/01b4w3m6mp55y531kyi1g8shh722kwqm-gcc-7.5.0-lib | /gnu/store/c6lnlfqh0jxkrz1x8mk7gdpx15iffxqd-dovecot-pigeonhole-0.5.11 | /gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31 | /gnu/store/hcxpkksmbql6s4al8yy2myr25kh4cic0-openssl-1.1.1g | /gnu/store/mhwawv2afb40xv96mdanr2qlqkj6wh8m-dovecot-2.3.11.3 `---- As I understood, it means that if someone have dovecot and dovecot-pigeonhole installed, and the decide to remove pigeonhole, dovecot will be GCed. Please correct me if am wrong. > [...] > > If you change the lambda to (lambda* (#:key outputs #:allow-other-keys) > then you can change the let to (let ((out (assoc-ref outputs "out"))) > and it fits better with the code formatting in the rest of Guix. Done. > [...] > > Some of these lines are too long. We try to wrap them at 80, and the > linter complains once it hits 90. If you start a new line after 'out' > then it should flow nicely. Done. Yeah, I saw this, but decided that separating the last argument is not that pretty. > [...] > > I would shorten this to 'Mail filtering in Dovecot using the Sieve > language' Done. I am fine with that. As a non native speaker I usually prefer not to touch these kind of things, until I am really sure it can be improved. =) [...] > > It looked to me like it was just lgpl2.1 Sorry, I am not following. I removed the comment I left indeed. Do you mean I should remove (license:non-copyleft "file://COPYING") the part completely? The blob contains both COPYING and COPYING.LGPL so I just copied them both. Footnotes: [1] https://pigeonhole.dovecot.org/download.html -- Alexey [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: pigeonhole.2.3-to-2.3.11.diff --] [-- Type: text/x-patch, Size: 531 bytes --] --- /home/levenson/Downloads/dovecot-2.3-pigeonhole-0.5.11/ChangeLog 2020-08-13 09:11:59.000000000 +0200 +++ /home/levenson/Downloads/dovecot-2.3.11-pigeonhole-0.5.11/ChangeLog 2020-08-12 14:21:42.000000000 +0200 @@ -1,11 +1,3 @@ -2020-08-13 07:45:38 +0300 Aki Tuomi <aki.tuomi@open-xchange.com> (d71e0372) - - configure: Fix version number - - Broken by ebadd718b918a552fce65ccae6ebaff9d482eb16 - -M configure.ac - 2020-06-30 11:53:28 +0300 Aki Tuomi <aki.tuomi@open-xchange.com> (6c69c917) NEWS: Add news for 0.5.11 ^ permalink raw reply [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v2 05/10] services: dovecot: Serialize global settings first. 2020-08-18 12:00 ` [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov ` (2 preceding siblings ...) 2020-08-18 12:00 ` [bug#42899] [PATCH v2 04/10] gnu: dovecot-pigeonhole: Add new variable Alexey Abramov @ 2020-08-18 12:00 ` Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 06/10] services: dovecot: Only serialize settings with non-empty values Alexey Abramov ` (4 subsequent siblings) 8 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-18 12:00 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (dovecot-configuration): To avoid dovecot warning messages, move serialization of protocol settings below the global one. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- gnu/services/mail.scm | 118 +++++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 2832303d88..a3c48bdb99 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -479,64 +479,6 @@ interfaces. If you want to specify non-default ports or anything more complex, customize the address and port fields of the @samp{inet-listener} of the specific services you are interested in.") - (protocols - (protocol-configuration-list - (list (protocol-configuration - (name "imap")))) - "List of protocols we want to serve. Available protocols include -@samp{imap}, @samp{pop3}, and @samp{lmtp}.") - - (services - (service-configuration-list - (list - (service-configuration - (kind "imap-login") - (client-limit 0) - (process-limit 0) - (listeners - (list - (inet-listener-configuration (protocol "imap") (port 143) (ssl? #f)) - (inet-listener-configuration (protocol "imaps") (port 993) (ssl? #t))))) - (service-configuration - (kind "pop3-login") - (listeners - (list - (inet-listener-configuration (protocol "pop3") (port 110) (ssl? #f)) - (inet-listener-configuration (protocol "pop3s") (port 995) (ssl? #t))))) - (service-configuration - (kind "lmtp") - (client-limit 1) - (process-limit 0) - (listeners - (list (unix-listener-configuration (path "lmtp") (mode "0666"))))) - (service-configuration - (kind "imap") - (client-limit 1) - (process-limit 1024)) - (service-configuration - (kind "pop3") - (client-limit 1) - (process-limit 1024)) - (service-configuration - (kind "auth") - (service-count 0) - (client-limit 0) - (process-limit 1) - (listeners - (list (unix-listener-configuration (path "auth-userdb"))))) - (service-configuration - (kind "auth-worker") - (client-limit 1) - (process-limit 0)) - (service-configuration - (kind "dict") - (client-limit 1) - (process-limit 0) - (listeners (list (unix-listener-configuration (path "dict"))))))) - "List of services to enable. Available services include @samp{imap}, -@samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and -@samp{lmtp}.") - (dict (dict-configuration (dict-configuration)) "Dict configuration, as created by the @code{dict-configuration} @@ -1434,7 +1376,65 @@ greyed out, instead of only later giving \"not selectable\" popup error. (imap-urlauth-host (string "") - "Host allowed in URLAUTH URLs sent by client. \"*\" allows all.") ) + "Host allowed in URLAUTH URLs sent by client. \"*\" allows all.") + + (protocols + (protocol-configuration-list + (list (protocol-configuration + (name "imap")))) + "List of protocols we want to serve. Available protocols include +@samp{imap}, @samp{pop3}, and @samp{lmtp}.") + + (services + (service-configuration-list + (list + (service-configuration + (kind "imap-login") + (client-limit 0) + (process-limit 0) + (listeners + (list + (inet-listener-configuration (protocol "imap") (port 143) (ssl? #f)) + (inet-listener-configuration (protocol "imaps") (port 993) (ssl? #t))))) + (service-configuration + (kind "pop3-login") + (listeners + (list + (inet-listener-configuration (protocol "pop3") (port 110) (ssl? #f)) + (inet-listener-configuration (protocol "pop3s") (port 995) (ssl? #t))))) + (service-configuration + (kind "lmtp") + (client-limit 1) + (process-limit 0) + (listeners + (list (unix-listener-configuration (path "lmtp") (mode "0666"))))) + (service-configuration + (kind "imap") + (client-limit 1) + (process-limit 1024)) + (service-configuration + (kind "pop3") + (client-limit 1) + (process-limit 1024)) + (service-configuration + (kind "auth") + (service-count 0) + (client-limit 0) + (process-limit 1) + (listeners + (list (unix-listener-configuration (path "auth-userdb"))))) + (service-configuration + (kind "auth-worker") + (client-limit 1) + (process-limit 0)) + (service-configuration + (kind "dict") + (client-limit 1) + (process-limit 0) + (listeners (list (unix-listener-configuration (path "dict"))))))) + "List of services to enable. Available services include @samp{imap}, +@samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and +@samp{lmtp}.")) (define-configuration opaque-dovecot-configuration (dovecot -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v2 06/10] services: dovecot: Only serialize settings with non-empty values. 2020-08-18 12:00 ` [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov ` (3 preceding siblings ...) 2020-08-18 12:00 ` [bug#42899] [PATCH v2 05/10] services: dovecot: Serialize global settings first Alexey Abramov @ 2020-08-18 12:00 ` Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 07/10] services: dovecot: Add 'mail-attribute-dict' configuration option Alexey Abramov ` (3 subsequent siblings) 8 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-18 12:00 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (serialize-space-separated-string-list): Protocols might have custom settings, which are not supported by other protocols. To prevent dovecot/services from crashing, serialize settings that hold non-empty values only. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- gnu/services/mail.scm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index a3c48bdb99..6e166af2be 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -99,7 +99,9 @@ (and (string? x) (not (string-index x #\space)))) val))) (define (serialize-space-separated-string-list field-name val) - (serialize-field field-name (string-join val " "))) + (match val + (() #f) + (_ (serialize-field field-name (string-join val " "))))) (define (comma-separated-string-list? val) (and (list? val) -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v2 07/10] services: dovecot: Add 'mail-attribute-dict' configuration option. 2020-08-18 12:00 ` [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov ` (4 preceding siblings ...) 2020-08-18 12:00 ` [bug#42899] [PATCH v2 06/10] services: dovecot: Only serialize settings with non-empty values Alexey Abramov @ 2020-08-18 12:00 ` Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 08/10] services: dovecot: Add 'imap-metadata?' protocol " Alexey Abramov ` (2 subsequent siblings) 8 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-18 12:00 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (dovecot-configuration): Define 'mail-attribute-dict' directive to support IMAP METADATA extension.: * doc/guix.texi (Mail Services): Document it. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- doc/guix.texi | 15 +++++++++++++++ gnu/services/mail.scm | 11 +++++++++++ 2 files changed, 26 insertions(+) diff --git a/doc/guix.texi b/doc/guix.texi index 9f803fdbac..bbdbdf70e1 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -18211,6 +18211,21 @@ could allow a user to delete others' mailboxes, or @code{ln -s @samp{""}. @end deftypevr +@deftypevr {@code{dovecot-configuration} parameter} string mail-attribute-dict +Activate the metadata storage of @code{IMAP METADATA} extension +@uref{https://tools.ietf.org/html/rfc5464,RFC@tie{}5464}. The goal of +the METADATA extension is to provide a means for clients to set and +retrieve 'annotations' or 'metadata' on an IMAP server. The annotations +can be associated with specific mailboxes or the server as a whole. The +server can choose to support only server annotations or both server and +mailbox annotations. For example, a general comment being added to a +mailbox may have an entry name of '/comment' and a value of 'Really +useful mailbox' + +Defaults to @samp{""}. + +@end deftypevr + @deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access? Allow full file system access to clients. There's no access checks other than what the operating system does for the active UID/GID. It diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 6e166af2be..d8df5c82e4 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -1130,6 +1130,17 @@ disabled.") @samp{mdbox-rotate-size}. This setting currently works only in Linux with some file systems (ext4, xfs).") + (mail-attribute-dict + (string "") + "Activate the metadata storage of @code{IMAP METADATA} extension +@uref{https://tools.ietf.org/html/rfc5464, RFC@tie{}5464}. The goal of the +METADATA extension is to provide a means for clients to set and retrieve +'annotations' or 'metadata' on an IMAP server. The annotations can be +associated with specific mailboxes or the server as a whole. The server can +choose to support only server annotations or both server and mailbox +annotations. For example, a general comment being added to a mailbox may have +an entry name of '/comment' and a value of 'Really useful mailbox'") + (mail-attachment-dir (string "") "sdbox and mdbox support saving mail attachments to external files, -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v2 08/10] services: dovecot: Add 'imap-metadata?' protocol configuration option. 2020-08-18 12:00 ` [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov ` (5 preceding siblings ...) 2020-08-18 12:00 ` [bug#42899] [PATCH v2 07/10] services: dovecot: Add 'mail-attribute-dict' configuration option Alexey Abramov @ 2020-08-18 12:00 ` Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 09/10] services: dovecot: Add 'managesieve-notify-capability' option Alexey Abramov 2020-08-23 21:18 ` [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing Efraim Flashner 8 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-18 12:00 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (protocol-configuration): Define the option to be able to activate the IMAP METADATA commands over the imap protocol. * doc/guix.texi (Mail Services): Document it. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- doc/guix.texi | 11 +++++++++++ gnu/services/mail.scm | 8 +++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/doc/guix.texi b/doc/guix.texi index bbdbdf70e1..5c3e706390 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -17513,6 +17513,17 @@ This is used by imap (for shared users) and lda. It defaults to @samp{"/var/run/dovecot/auth-userdb"}. @end deftypevr +@deftypevr {@code{protocol-configuration} parameter} boolean imap-metadata? +Activate the commands of @code{IMAP METADATA} extension +@uref{https://tools.ietf.org/html/rfc5464,RFC@tie{}5464}. + +If activated, a dictionary needs to be configured, via the +@code{mail-attribute-dict} setting. + +Defaults to @samp{#f}. + +@end deftypevr + @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins Space separated list of plugins to load. @end deftypevr diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index d8df5c82e4..ee710303e7 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -348,7 +348,13 @@ This is used by imap (for shared users) and lda.") (mail-max-userip-connections (non-negative-integer 10) "Maximum number of IMAP connections allowed for a user from each IP -address. NOTE: The username is compared case-sensitively.")) +address. NOTE: The username is compared case-sensitively.") + (imap-metadata? + (boolean #f) + "Activate the commands of @code{IMAP METADATA} extension +@uref{https://tools.ietf.org/html/rfc5464, RFC@tie{}5464}. If activated, a +dictionary needs to be configured, via the @code{mail-attribute-dict} +setting.")) (define (serialize-protocol-configuration field-name val) (format #t "protocol ~a {\n" (protocol-configuration-name val)) -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v2 09/10] services: dovecot: Add 'managesieve-notify-capability' option. 2020-08-18 12:00 ` [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov ` (6 preceding siblings ...) 2020-08-18 12:00 ` [bug#42899] [PATCH v2 08/10] services: dovecot: Add 'imap-metadata?' protocol " Alexey Abramov @ 2020-08-18 12:00 ` Alexey Abramov 2020-08-23 21:18 ` [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing Efraim Flashner 8 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-18 12:00 UTC (permalink / raw) To: 42899 * doc/guix.texi (Mail Services): Document it. * gnu/services/mail.scm (protocol-configuration): Define it. Signed-off-by: Alexey Abramov <levenson@mmer.org> --- doc/guix.texi | 9 +++++++++ gnu/services/mail.scm | 8 +++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/guix.texi b/doc/guix.texi index 5c3e706390..10d4861c4e 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -17524,6 +17524,15 @@ Defaults to @samp{#f}. @end deftypevr +@deftypevr {@code{protocol-configuration} parameter} space-separated-string-list managesieve-notify-capabilities +Report notify capabilities by the managesieve service upon a client +connection. If left unassigned, these will be assigned dynamically +according to what the Sieve interpreter supports by default (after login +this may differ depending on the authenticated user). + +Defaults to @samp{()}. +@end deftypevr + @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins Space separated list of plugins to load. @end deftypevr diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index ee710303e7..8b57b42dfe 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -354,7 +354,13 @@ address. NOTE: The username is compared case-sensitively.") "Activate the commands of @code{IMAP METADATA} extension @uref{https://tools.ietf.org/html/rfc5464, RFC@tie{}5464}. If activated, a dictionary needs to be configured, via the @code{mail-attribute-dict} -setting.")) +setting.") + (managesieve-notify-capability + (space-separated-string-list '()) + "Report NOTIFY capabilities by the ManageSieve service upon a client +connection. If left unassigned, these will be assigned dynamically +according to what the Sieve interpreter supports by default.")) + (define (serialize-protocol-configuration field-name val) (format #t "protocol ~a {\n" (protocol-configuration-name val)) -- 2.27.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing. 2020-08-18 12:00 ` [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov ` (7 preceding siblings ...) 2020-08-18 12:00 ` [bug#42899] [PATCH v2 09/10] services: dovecot: Add 'managesieve-notify-capability' option Alexey Abramov @ 2020-08-23 21:18 ` Efraim Flashner 8 siblings, 0 replies; 61+ messages in thread From: Efraim Flashner @ 2020-08-23 21:18 UTC (permalink / raw) To: Alexey Abramov; +Cc: 42899 [-- Attachment #1: Type: text/plain, Size: 2209 bytes --] I've sorted the added libraries alphabetically and pushed this patch. On Tue, Aug 18, 2020 at 02:00:29PM +0200, Alexey Abramov wrote: > * gnu/packages/mail.scm (dovecot)[inputs]: Add ice4c and clucene libraries. > * gnu/packages/mail.scm (dovecot)[arguments]: Add --with-lucene configuration switch. > > Signed-off-by: Alexey Abramov <levenson@mmer.org> > --- > gnu/packages/mail.scm | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm > index 6792b9b4a9..98e75fa90f 100644 > --- a/gnu/packages/mail.scm > +++ b/gnu/packages/mail.scm > @@ -87,6 +87,7 @@ > #:use-module (gnu packages guile-xyz) > #:use-module (gnu packages flex) > #:use-module (gnu packages haskell-xyz) > + #:use-module (gnu packages icu4c) > #:use-module (gnu packages kerberos) > #:use-module (gnu packages libcanberra) > #:use-module (gnu packages libevent) > @@ -113,6 +114,7 @@ > #:use-module (gnu packages python-web) > #:use-module (gnu packages python-xyz) > #:use-module (gnu packages readline) > + #:use-module (gnu packages rdf) > #:use-module (gnu packages ruby) > #:use-module (gnu packages search) > #:use-module (gnu packages serialization) > @@ -1425,11 +1427,14 @@ facilities for checking incoming mail.") > ("lz4" ,lz4) > ("openssl" ,openssl) > ("sqlite" ,sqlite) > - ("zlib" ,zlib))) > + ("zlib" ,zlib) > + ("icu4c" ,icu4c) > + ("clucene" ,clucene))) > (arguments > `(#:configure-flags '("--sysconfdir=/etc" > "--localstatedir=/var" > - "--with-sqlite") ; not auto-detected > + "--with-sqlite" ; not auto-detected > + "--with-lucene") > #:phases > (modify-phases %standard-phases > (add-after 'unpack 'patch-file-names > -- > 2.27.0 > > > > -- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole. 2020-08-17 9:27 [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov @ 2020-08-23 21:23 ` Efraim Flashner 2020-08-27 15:17 ` [bug#42899] [PATCH v3 1/9] gnu: dovecot: Set moduledir to global directory Alexey Abramov ` (4 subsequent siblings) 7 siblings, 0 replies; 61+ messages in thread From: Efraim Flashner @ 2020-08-23 21:23 UTC (permalink / raw) To: Alexey Abramov; +Cc: 42899 [-- Attachment #1: Type: text/plain, Size: 473 bytes --] There's some changes to dovecot and the dovecot service here. I don't use the dovecot service so I don't really feel comfortable reviewing it in depth. I believe some of the others who use the dovecot service will be coming by to test out those bits. -- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v3 1/9] gnu: dovecot: Set moduledir to global directory. 2020-08-17 9:27 [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole Alexey Abramov ` (2 preceding siblings ...) 2020-08-23 21:23 ` [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole Efraim Flashner @ 2020-08-27 15:17 ` Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 2/9] services: dovecot: Use modules via symlink to system profile Alexey Abramov ` (7 more replies) 2020-09-08 13:53 ` [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory Alexey Abramov ` (3 subsequent siblings) 7 siblings, 8 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-27 15:17 UTC (permalink / raw) To: 42899; +Cc: Efraim Flashner From: Efraim Flashner <efraim@flashner.co.il> * gnu/packages/mail.scm (dovecot)[arguments]: Add configure-flag to set moduledir. Adjust custom 'install phase to override moduledir so it successfully installs. --- gnu/packages/mail.scm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 81dc5b8eec..c22dd27547 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -1444,7 +1444,8 @@ facilities for checking incoming mail.") `(#:configure-flags '("--sysconfdir=/etc" "--localstatedir=/var" "--with-sqlite" ; not auto-detected - "--with-lucene") ; not auto-detected + "--with-lucene" ; not auto-detected + "--with-moduledir=/etc/dovecot/modules") #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-file-names @@ -1461,9 +1462,13 @@ facilities for checking incoming mail.") (("cat") (which "cat"))) #t)) (replace 'install - (lambda* (#:key make-flags #:allow-other-keys) + (lambda* (#:key outputs make-flags #:allow-other-keys) + ;; The .la files don't like having the moduledir moved. + (for-each delete-file (find-files "." "\\.la")) ;; Simple hack to avoid installing a trivial README in /etc. (apply invoke "make" "install" "sysconfdir=/tmp/bogus" + (string-append "moduledir=" (assoc-ref outputs "out") + "/lib/dovecot") make-flags)))))) (home-page "https://www.dovecot.org") (synopsis "Secure POP3/IMAP server") -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v3 2/9] services: dovecot: Use modules via symlink to system profile. 2020-08-27 15:17 ` [bug#42899] [PATCH v3 1/9] gnu: dovecot: Set moduledir to global directory Alexey Abramov @ 2020-08-27 15:17 ` Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 3/9] gnu: dovecot-pigeonhole: Add new variable Alexey Abramov ` (6 subsequent siblings) 7 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-27 15:17 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (%dovecot-activation): Link the location with multiple plugins (dovecot-pigeonhole, etc), to a place where dovecot can find them. * gnu/services/mail.scm (dovecot-configuration): Use the symlink. --- doc/guix.texi | 9 +++++++-- gnu/services/mail.scm | 13 ++++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 0b79a49814..dfa83c409c 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -18360,8 +18360,13 @@ Defaults to @samp{"/var/run/dovecot/auth-userdb"}. @end deftypevr @deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir -Directory where to look up mail plugins. -Defaults to @samp{"/usr/lib/dovecot"}. +Directory where to look up mail plugins. In Guix, dovecot plugins have +all its modules under /gnu/store/xxx-plugin/(lib|libexec)/dovecot. To be +able to load all those modules by doveconf or services like sieve, +@samp{mail-plugin-dir} is a symlink "/run/current-system/profile/lib/dovecot", +which creates during the activation step. + +Defaults to @samp{"/etc/dovecot/modules"}. @end deftypevr @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index cfcaf4601b..2832303d88 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -1044,8 +1044,12 @@ directories are prefixed with the chroot directory, append \"/.\" to This is used by imap (for shared users) and lda.") (mail-plugin-dir - (file-name "/usr/lib/dovecot") - "Directory where to look up mail plugins.") + (file-name "/etc/dovecot/modules") + "Directory where to look up mail plugins. In Guix, dovecot plugins have +all its modules under /gnu/store/xxx-plugin/(lib|libexec)/dovecot. To be able +to load all those modules by doveconf or services like imap, +@samp{mail-plugin-dir} is a symlink `/run/current-system/profile/lib/dovecot`, +which creates during the activation step.") (mail-plugins (space-separated-string-list '()) @@ -1519,13 +1523,16 @@ greyed out, instead of only later giving \"not selectable\" popup error. (else (format (current-error-port) "Failed to create public key at ~a.\n" public-key))))) - (let ((user (getpwnam "dovecot"))) + (let ((user (getpwnam "dovecot")) + (moduledir "/etc/dovecot/modules")) (mkdir-p/perms "/var/run/dovecot" user #o755) (mkdir-p/perms "/var/lib/dovecot" user #o755) (mkdir-p/perms "/etc/dovecot" user #o755) (copy-file #$(plain-file "dovecot.conf" config-str) "/etc/dovecot/dovecot.conf") (mkdir-p/perms "/etc/dovecot/private" user #o700) + (unless (file-exists? moduledir) + (symlink "/run/current-system/profile/lib/dovecot" moduledir)) (create-self-signed-certificate-if-absent #:private-key "/etc/dovecot/private/default.pem" #:public-key "/etc/dovecot/default.pem" -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v3 3/9] gnu: dovecot-pigeonhole: Add new variable. 2020-08-27 15:17 ` [bug#42899] [PATCH v3 1/9] gnu: dovecot: Set moduledir to global directory Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 2/9] services: dovecot: Use modules via symlink to system profile Alexey Abramov @ 2020-08-27 15:17 ` Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 4/9] services: dovecot: Serialize global settings first Alexey Abramov ` (5 subsequent siblings) 7 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-27 15:17 UTC (permalink / raw) To: 42899 --- gnu/packages/mail.scm | 50 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index c22dd27547..5470144d53 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -1481,6 +1481,56 @@ It supports mbox/Maildir and its own dbox/mdbox formats.") (license (list license:lgpl2.1 license:expat (license:non-copyleft "file://COPYING"))))) +(define-public dovecot-pigeonhole + (let ((dovecot-version (version-major+minor (package-version dovecot)))) + (package + (name "dovecot-pigeonhole") + (version "0.5.11") + (source + (origin + (method url-fetch) + (uri (string-append "https://pigeonhole.dovecot.org/releases/" + dovecot-version "/" + "dovecot-" dovecot-version "-pigeonhole-" version ".tar.gz")) + (sha256 + (base32 + "1w5mryv6izh1gv7davnl94rb0pvh5bxl2bydzbfla1b83x22m5qb")))) + (build-system gnu-build-system) + (inputs + `(("dovecot" ,dovecot))) + (arguments + `(#:configure-flags + (list "--with-dovecot-install-dirs=no" + (string-append "--with-dovecot=" + (assoc-ref %build-inputs "dovecot") + "/lib/dovecot") + (string-append "--with-moduledir=" + (assoc-ref %outputs "out") + "/lib/dovecot")) + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-file-names + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (substitute* "src/managesieve/managesieve-settings.c" + ((".executable = \"managesieve\"") + (string-append ".executable = \"" out + "/libexec/dovecot/managesieve\""))) + (substitute* "src/managesieve-login/managesieve-login-settings.c" + ((".executable = \"managesieve-login\"") + (string-append ".executable = \"" out + "/libexec/dovecot/managesieve-login\"")))) + #t))))) + (home-page "https://pigeonhole.dovecot.org") + (synopsis "Mail filtering in Dovecot using the Sieve language") + (description + "@code{dovecot-pigonhole} adds support for the Sieve +language (RFC 5228) and the ManageSieve protocol (RFC 5804) to the +@code{Dovecot} Secure IMAP Server.") + (license (list license:lgpl2.1 + (license:non-copyleft "file://COPYING") + (license:non-copyleft "file://COPYING.LGPL")))))) + (define-public dovecot-trees (package (name "dovecot-trees") -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v3 4/9] services: dovecot: Serialize global settings first. 2020-08-27 15:17 ` [bug#42899] [PATCH v3 1/9] gnu: dovecot: Set moduledir to global directory Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 2/9] services: dovecot: Use modules via symlink to system profile Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 3/9] gnu: dovecot-pigeonhole: Add new variable Alexey Abramov @ 2020-08-27 15:17 ` Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 5/9] services: dovecot: Only serialize settings with non-empty values Alexey Abramov ` (4 subsequent siblings) 7 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-27 15:17 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (dovecot-configuration): To avoid dovecot warning messages, move serialization of protocol settings below the global one. --- gnu/services/mail.scm | 118 +++++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 2832303d88..a3c48bdb99 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -479,64 +479,6 @@ interfaces. If you want to specify non-default ports or anything more complex, customize the address and port fields of the @samp{inet-listener} of the specific services you are interested in.") - (protocols - (protocol-configuration-list - (list (protocol-configuration - (name "imap")))) - "List of protocols we want to serve. Available protocols include -@samp{imap}, @samp{pop3}, and @samp{lmtp}.") - - (services - (service-configuration-list - (list - (service-configuration - (kind "imap-login") - (client-limit 0) - (process-limit 0) - (listeners - (list - (inet-listener-configuration (protocol "imap") (port 143) (ssl? #f)) - (inet-listener-configuration (protocol "imaps") (port 993) (ssl? #t))))) - (service-configuration - (kind "pop3-login") - (listeners - (list - (inet-listener-configuration (protocol "pop3") (port 110) (ssl? #f)) - (inet-listener-configuration (protocol "pop3s") (port 995) (ssl? #t))))) - (service-configuration - (kind "lmtp") - (client-limit 1) - (process-limit 0) - (listeners - (list (unix-listener-configuration (path "lmtp") (mode "0666"))))) - (service-configuration - (kind "imap") - (client-limit 1) - (process-limit 1024)) - (service-configuration - (kind "pop3") - (client-limit 1) - (process-limit 1024)) - (service-configuration - (kind "auth") - (service-count 0) - (client-limit 0) - (process-limit 1) - (listeners - (list (unix-listener-configuration (path "auth-userdb"))))) - (service-configuration - (kind "auth-worker") - (client-limit 1) - (process-limit 0)) - (service-configuration - (kind "dict") - (client-limit 1) - (process-limit 0) - (listeners (list (unix-listener-configuration (path "dict"))))))) - "List of services to enable. Available services include @samp{imap}, -@samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and -@samp{lmtp}.") - (dict (dict-configuration (dict-configuration)) "Dict configuration, as created by the @code{dict-configuration} @@ -1434,7 +1376,65 @@ greyed out, instead of only later giving \"not selectable\" popup error. (imap-urlauth-host (string "") - "Host allowed in URLAUTH URLs sent by client. \"*\" allows all.") ) + "Host allowed in URLAUTH URLs sent by client. \"*\" allows all.") + + (protocols + (protocol-configuration-list + (list (protocol-configuration + (name "imap")))) + "List of protocols we want to serve. Available protocols include +@samp{imap}, @samp{pop3}, and @samp{lmtp}.") + + (services + (service-configuration-list + (list + (service-configuration + (kind "imap-login") + (client-limit 0) + (process-limit 0) + (listeners + (list + (inet-listener-configuration (protocol "imap") (port 143) (ssl? #f)) + (inet-listener-configuration (protocol "imaps") (port 993) (ssl? #t))))) + (service-configuration + (kind "pop3-login") + (listeners + (list + (inet-listener-configuration (protocol "pop3") (port 110) (ssl? #f)) + (inet-listener-configuration (protocol "pop3s") (port 995) (ssl? #t))))) + (service-configuration + (kind "lmtp") + (client-limit 1) + (process-limit 0) + (listeners + (list (unix-listener-configuration (path "lmtp") (mode "0666"))))) + (service-configuration + (kind "imap") + (client-limit 1) + (process-limit 1024)) + (service-configuration + (kind "pop3") + (client-limit 1) + (process-limit 1024)) + (service-configuration + (kind "auth") + (service-count 0) + (client-limit 0) + (process-limit 1) + (listeners + (list (unix-listener-configuration (path "auth-userdb"))))) + (service-configuration + (kind "auth-worker") + (client-limit 1) + (process-limit 0)) + (service-configuration + (kind "dict") + (client-limit 1) + (process-limit 0) + (listeners (list (unix-listener-configuration (path "dict"))))))) + "List of services to enable. Available services include @samp{imap}, +@samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and +@samp{lmtp}.")) (define-configuration opaque-dovecot-configuration (dovecot -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v3 5/9] services: dovecot: Only serialize settings with non-empty values. 2020-08-27 15:17 ` [bug#42899] [PATCH v3 1/9] gnu: dovecot: Set moduledir to global directory Alexey Abramov ` (2 preceding siblings ...) 2020-08-27 15:17 ` [bug#42899] [PATCH v3 4/9] services: dovecot: Serialize global settings first Alexey Abramov @ 2020-08-27 15:17 ` Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 6/9] services: dovecot: Add 'mail-attribute-dict' configuration option Alexey Abramov ` (3 subsequent siblings) 7 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-27 15:17 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (serialize-space-separated-string-list): Protocols might have custom settings, which are not supported by other protocols. To prevent dovecot/services from crashing, serialize settings that hold non-empty values only. --- gnu/services/mail.scm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index a3c48bdb99..6e166af2be 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -99,7 +99,9 @@ (and (string? x) (not (string-index x #\space)))) val))) (define (serialize-space-separated-string-list field-name val) - (serialize-field field-name (string-join val " "))) + (match val + (() #f) + (_ (serialize-field field-name (string-join val " "))))) (define (comma-separated-string-list? val) (and (list? val) -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v3 6/9] services: dovecot: Add 'mail-attribute-dict' configuration option. 2020-08-27 15:17 ` [bug#42899] [PATCH v3 1/9] gnu: dovecot: Set moduledir to global directory Alexey Abramov ` (3 preceding siblings ...) 2020-08-27 15:17 ` [bug#42899] [PATCH v3 5/9] services: dovecot: Only serialize settings with non-empty values Alexey Abramov @ 2020-08-27 15:17 ` Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 7/9] services: dovecot: Add 'imap-metadata?' protocol " Alexey Abramov ` (2 subsequent siblings) 7 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-27 15:17 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (dovecot-configuration): Define 'mail-attribute-dict' directive to support IMAP METADATA extension.: * doc/guix.texi (Mail Services): Document it. --- doc/guix.texi | 15 +++++++++++++++ gnu/services/mail.scm | 11 +++++++++++ 2 files changed, 26 insertions(+) diff --git a/doc/guix.texi b/doc/guix.texi index dfa83c409c..f2124560ae 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -18238,6 +18238,21 @@ could allow a user to delete others' mailboxes, or @code{ln -s @samp{""}. @end deftypevr +@deftypevr {@code{dovecot-configuration} parameter} string mail-attribute-dict +Activate the metadata storage of @code{IMAP METADATA} extension +@uref{https://tools.ietf.org/html/rfc5464,RFC@tie{}5464}. The goal of +the METADATA extension is to provide a means for clients to set and +retrieve 'annotations' or 'metadata' on an IMAP server. The annotations +can be associated with specific mailboxes or the server as a whole. The +server can choose to support only server annotations or both server and +mailbox annotations. For example, a general comment being added to a +mailbox may have an entry name of '/comment' and a value of 'Really +useful mailbox' + +Defaults to @samp{""}. + +@end deftypevr + @deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access? Allow full file system access to clients. There's no access checks other than what the operating system does for the active UID/GID. It diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 6e166af2be..d8df5c82e4 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -1130,6 +1130,17 @@ disabled.") @samp{mdbox-rotate-size}. This setting currently works only in Linux with some file systems (ext4, xfs).") + (mail-attribute-dict + (string "") + "Activate the metadata storage of @code{IMAP METADATA} extension +@uref{https://tools.ietf.org/html/rfc5464, RFC@tie{}5464}. The goal of the +METADATA extension is to provide a means for clients to set and retrieve +'annotations' or 'metadata' on an IMAP server. The annotations can be +associated with specific mailboxes or the server as a whole. The server can +choose to support only server annotations or both server and mailbox +annotations. For example, a general comment being added to a mailbox may have +an entry name of '/comment' and a value of 'Really useful mailbox'") + (mail-attachment-dir (string "") "sdbox and mdbox support saving mail attachments to external files, -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v3 7/9] services: dovecot: Add 'imap-metadata?' protocol configuration option. 2020-08-27 15:17 ` [bug#42899] [PATCH v3 1/9] gnu: dovecot: Set moduledir to global directory Alexey Abramov ` (4 preceding siblings ...) 2020-08-27 15:17 ` [bug#42899] [PATCH v3 6/9] services: dovecot: Add 'mail-attribute-dict' configuration option Alexey Abramov @ 2020-08-27 15:17 ` Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 8/9] services: dovecot: Add 'managesieve-notify-capability' option Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 9/9] services: dovecot: Add 'managesieve-sieve-capability' option Alexey Abramov 7 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-27 15:17 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (protocol-configuration): Define the option to be able to activate the IMAP METADATA commands over the imap protocol. * doc/guix.texi (Mail Services): Document it. --- doc/guix.texi | 11 +++++++++++ gnu/services/mail.scm | 8 +++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/doc/guix.texi b/doc/guix.texi index f2124560ae..f46854480b 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -17540,6 +17540,17 @@ This is used by imap (for shared users) and lda. It defaults to @samp{"/var/run/dovecot/auth-userdb"}. @end deftypevr +@deftypevr {@code{protocol-configuration} parameter} boolean imap-metadata? +Activate the commands of @code{IMAP METADATA} extension +@uref{https://tools.ietf.org/html/rfc5464,RFC@tie{}5464}. + +If activated, a dictionary needs to be configured, via the +@code{mail-attribute-dict} setting. + +Defaults to @samp{#f}. + +@end deftypevr + @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins Space separated list of plugins to load. @end deftypevr diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index d8df5c82e4..ee710303e7 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -348,7 +348,13 @@ This is used by imap (for shared users) and lda.") (mail-max-userip-connections (non-negative-integer 10) "Maximum number of IMAP connections allowed for a user from each IP -address. NOTE: The username is compared case-sensitively.")) +address. NOTE: The username is compared case-sensitively.") + (imap-metadata? + (boolean #f) + "Activate the commands of @code{IMAP METADATA} extension +@uref{https://tools.ietf.org/html/rfc5464, RFC@tie{}5464}. If activated, a +dictionary needs to be configured, via the @code{mail-attribute-dict} +setting.")) (define (serialize-protocol-configuration field-name val) (format #t "protocol ~a {\n" (protocol-configuration-name val)) -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v3 8/9] services: dovecot: Add 'managesieve-notify-capability' option. 2020-08-27 15:17 ` [bug#42899] [PATCH v3 1/9] gnu: dovecot: Set moduledir to global directory Alexey Abramov ` (5 preceding siblings ...) 2020-08-27 15:17 ` [bug#42899] [PATCH v3 7/9] services: dovecot: Add 'imap-metadata?' protocol " Alexey Abramov @ 2020-08-27 15:17 ` Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 9/9] services: dovecot: Add 'managesieve-sieve-capability' option Alexey Abramov 7 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-27 15:17 UTC (permalink / raw) To: 42899 * doc/guix.texi (Mail Services): Document it. * gnu/services/mail.scm (protocol-configuration): Define it. --- doc/guix.texi | 9 +++++++++ gnu/services/mail.scm | 8 +++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/guix.texi b/doc/guix.texi index f46854480b..acccef181f 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -17551,6 +17551,15 @@ Defaults to @samp{#f}. @end deftypevr +@deftypevr {@code{protocol-configuration} parameter} space-separated-string-list managesieve-notify-capabilities +Report notify capabilities by the managesieve service upon a client +connection. If left unassigned, these will be assigned dynamically +according to what the Sieve interpreter supports by default (after login +this may differ depending on the authenticated user). + +Defaults to @samp{()}. +@end deftypevr + @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins Space separated list of plugins to load. @end deftypevr diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index ee710303e7..8b57b42dfe 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -354,7 +354,13 @@ address. NOTE: The username is compared case-sensitively.") "Activate the commands of @code{IMAP METADATA} extension @uref{https://tools.ietf.org/html/rfc5464, RFC@tie{}5464}. If activated, a dictionary needs to be configured, via the @code{mail-attribute-dict} -setting.")) +setting.") + (managesieve-notify-capability + (space-separated-string-list '()) + "Report NOTIFY capabilities by the ManageSieve service upon a client +connection. If left unassigned, these will be assigned dynamically +according to what the Sieve interpreter supports by default.")) + (define (serialize-protocol-configuration field-name val) (format #t "protocol ~a {\n" (protocol-configuration-name val)) -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v3 9/9] services: dovecot: Add 'managesieve-sieve-capability' option. 2020-08-27 15:17 ` [bug#42899] [PATCH v3 1/9] gnu: dovecot: Set moduledir to global directory Alexey Abramov ` (6 preceding siblings ...) 2020-08-27 15:17 ` [bug#42899] [PATCH v3 8/9] services: dovecot: Add 'managesieve-notify-capability' option Alexey Abramov @ 2020-08-27 15:17 ` Alexey Abramov 7 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-08-27 15:17 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (protocol-configuration): Define it. * doc/guix.texi (Mail Services): Document it. --- doc/guix.texi | 9 +++++++++ gnu/services/mail.scm | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/doc/guix.texi b/doc/guix.texi index acccef181f..59377bb678 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -17560,6 +17560,15 @@ this may differ depending on the authenticated user). Defaults to @samp{()}. @end deftypevr +@deftypevr {@code{protocol-configuration} parameter} space-separated-string-list managesieve-sieve-capability +Report SIEVE capabilities by the ManageSieve service upon a client +connection. If left unassigned, these will be assigned dynamically +according to what the Sieve interpreter supports by default. + +Defaults to @samp{()}. + +@end deftypevr + @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins Space separated list of plugins to load. @end deftypevr diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 8b57b42dfe..91d7041636 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -359,7 +359,12 @@ setting.") (space-separated-string-list '()) "Report NOTIFY capabilities by the ManageSieve service upon a client connection. If left unassigned, these will be assigned dynamically -according to what the Sieve interpreter supports by default.")) +according to what the Sieve interpreter supports by default.") + (managesieve-sieve-capability + (space-separated-string-list '()) + "Report SIEVE capabilities by the ManageSieve service upon a client ++connection. If left unassigned, these will be assigned dynamically ++according to what the Sieve interpreter supports by default.")) (define (serialize-protocol-configuration field-name val) -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory. 2020-08-17 9:27 [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole Alexey Abramov ` (3 preceding siblings ...) 2020-08-27 15:17 ` [bug#42899] [PATCH v3 1/9] gnu: dovecot: Set moduledir to global directory Alexey Abramov @ 2020-09-08 13:53 ` Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 2/8] services: dovecot: Use modules via symlink to system profile Alexey Abramov ` (7 more replies) 2020-10-20 15:06 ` [bug#42899] [PATCH v5 0/6] Dovecot improvements Alexey Abramov ` (2 subsequent siblings) 7 siblings, 8 replies; 61+ messages in thread From: Alexey Abramov @ 2020-09-08 13:53 UTC (permalink / raw) To: 42899; +Cc: Efraim Flashner From: Efraim Flashner <efraim@flashner.co.il> * gnu/packages/mail.scm (dovecot)[arguments]: Add configure-flag to set moduledir. Adjust custom 'install phase to override moduledir so it successfully installs. --- gnu/packages/mail.scm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index beee68c67d..6068736508 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -1460,7 +1460,8 @@ facilities for checking incoming mail.") `(#:configure-flags '("--sysconfdir=/etc" "--localstatedir=/var" "--with-sqlite" ; not auto-detected - "--with-lucene") ; not auto-detected + "--with-lucene" ; not auto-detected + "--with-moduledir=/etc/dovecot/modules") #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-file-names @@ -1477,9 +1478,13 @@ facilities for checking incoming mail.") (("cat") (which "cat"))) #t)) (replace 'install - (lambda* (#:key make-flags #:allow-other-keys) + (lambda* (#:key outputs make-flags #:allow-other-keys) + ;; The .la files don't like having the moduledir moved. + (for-each delete-file (find-files "." "\\.la")) ;; Simple hack to avoid installing a trivial README in /etc. (apply invoke "make" "install" "sysconfdir=/tmp/bogus" + (string-append "moduledir=" (assoc-ref outputs "out") + "/lib/dovecot") make-flags)))))) (home-page "https://www.dovecot.org") (synopsis "Secure POP3/IMAP server") -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v4 2/8] services: dovecot: Use modules via symlink to system profile. 2020-09-08 13:53 ` [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory Alexey Abramov @ 2020-09-08 13:53 ` Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 3/8] services: dovecot: Serialize global settings first Alexey Abramov ` (6 subsequent siblings) 7 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-09-08 13:53 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (%dovecot-activation): Link the location with multiple plugins (dovecot-pigeonhole, etc), to a place where dovecot can find them. * gnu/services/mail.scm (dovecot-configuration): Use the symlink. --- doc/guix.texi | 9 +++++++-- gnu/services/mail.scm | 13 ++++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index f224e356bc..61b65db35b 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -18613,8 +18613,13 @@ Defaults to @samp{"/var/run/dovecot/auth-userdb"}. @end deftypevr @deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir -Directory where to look up mail plugins. -Defaults to @samp{"/usr/lib/dovecot"}. +Directory where to look up mail plugins. In Guix, dovecot plugins have +all its modules under /gnu/store/xxx-plugin/(lib|libexec)/dovecot. To be +able to load all those modules by doveconf or services like sieve, +@samp{mail-plugin-dir} is a symlink "/run/current-system/profile/lib/dovecot", +which creates during the activation step. + +Defaults to @samp{"/etc/dovecot/modules"}. @end deftypevr @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index cfcaf4601b..2832303d88 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -1044,8 +1044,12 @@ directories are prefixed with the chroot directory, append \"/.\" to This is used by imap (for shared users) and lda.") (mail-plugin-dir - (file-name "/usr/lib/dovecot") - "Directory where to look up mail plugins.") + (file-name "/etc/dovecot/modules") + "Directory where to look up mail plugins. In Guix, dovecot plugins have +all its modules under /gnu/store/xxx-plugin/(lib|libexec)/dovecot. To be able +to load all those modules by doveconf or services like imap, +@samp{mail-plugin-dir} is a symlink `/run/current-system/profile/lib/dovecot`, +which creates during the activation step.") (mail-plugins (space-separated-string-list '()) @@ -1519,13 +1523,16 @@ greyed out, instead of only later giving \"not selectable\" popup error. (else (format (current-error-port) "Failed to create public key at ~a.\n" public-key))))) - (let ((user (getpwnam "dovecot"))) + (let ((user (getpwnam "dovecot")) + (moduledir "/etc/dovecot/modules")) (mkdir-p/perms "/var/run/dovecot" user #o755) (mkdir-p/perms "/var/lib/dovecot" user #o755) (mkdir-p/perms "/etc/dovecot" user #o755) (copy-file #$(plain-file "dovecot.conf" config-str) "/etc/dovecot/dovecot.conf") (mkdir-p/perms "/etc/dovecot/private" user #o700) + (unless (file-exists? moduledir) + (symlink "/run/current-system/profile/lib/dovecot" moduledir)) (create-self-signed-certificate-if-absent #:private-key "/etc/dovecot/private/default.pem" #:public-key "/etc/dovecot/default.pem" -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v4 3/8] services: dovecot: Serialize global settings first. 2020-09-08 13:53 ` [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 2/8] services: dovecot: Use modules via symlink to system profile Alexey Abramov @ 2020-09-08 13:53 ` Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 4/8] services: dovecot: Only serialize settings with non-empty values Alexey Abramov ` (5 subsequent siblings) 7 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-09-08 13:53 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (dovecot-configuration): To avoid dovecot warning messages, move serialization of protocol settings below the global one. --- gnu/services/mail.scm | 118 +++++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 2832303d88..a3c48bdb99 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -479,64 +479,6 @@ interfaces. If you want to specify non-default ports or anything more complex, customize the address and port fields of the @samp{inet-listener} of the specific services you are interested in.") - (protocols - (protocol-configuration-list - (list (protocol-configuration - (name "imap")))) - "List of protocols we want to serve. Available protocols include -@samp{imap}, @samp{pop3}, and @samp{lmtp}.") - - (services - (service-configuration-list - (list - (service-configuration - (kind "imap-login") - (client-limit 0) - (process-limit 0) - (listeners - (list - (inet-listener-configuration (protocol "imap") (port 143) (ssl? #f)) - (inet-listener-configuration (protocol "imaps") (port 993) (ssl? #t))))) - (service-configuration - (kind "pop3-login") - (listeners - (list - (inet-listener-configuration (protocol "pop3") (port 110) (ssl? #f)) - (inet-listener-configuration (protocol "pop3s") (port 995) (ssl? #t))))) - (service-configuration - (kind "lmtp") - (client-limit 1) - (process-limit 0) - (listeners - (list (unix-listener-configuration (path "lmtp") (mode "0666"))))) - (service-configuration - (kind "imap") - (client-limit 1) - (process-limit 1024)) - (service-configuration - (kind "pop3") - (client-limit 1) - (process-limit 1024)) - (service-configuration - (kind "auth") - (service-count 0) - (client-limit 0) - (process-limit 1) - (listeners - (list (unix-listener-configuration (path "auth-userdb"))))) - (service-configuration - (kind "auth-worker") - (client-limit 1) - (process-limit 0)) - (service-configuration - (kind "dict") - (client-limit 1) - (process-limit 0) - (listeners (list (unix-listener-configuration (path "dict"))))))) - "List of services to enable. Available services include @samp{imap}, -@samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and -@samp{lmtp}.") - (dict (dict-configuration (dict-configuration)) "Dict configuration, as created by the @code{dict-configuration} @@ -1434,7 +1376,65 @@ greyed out, instead of only later giving \"not selectable\" popup error. (imap-urlauth-host (string "") - "Host allowed in URLAUTH URLs sent by client. \"*\" allows all.") ) + "Host allowed in URLAUTH URLs sent by client. \"*\" allows all.") + + (protocols + (protocol-configuration-list + (list (protocol-configuration + (name "imap")))) + "List of protocols we want to serve. Available protocols include +@samp{imap}, @samp{pop3}, and @samp{lmtp}.") + + (services + (service-configuration-list + (list + (service-configuration + (kind "imap-login") + (client-limit 0) + (process-limit 0) + (listeners + (list + (inet-listener-configuration (protocol "imap") (port 143) (ssl? #f)) + (inet-listener-configuration (protocol "imaps") (port 993) (ssl? #t))))) + (service-configuration + (kind "pop3-login") + (listeners + (list + (inet-listener-configuration (protocol "pop3") (port 110) (ssl? #f)) + (inet-listener-configuration (protocol "pop3s") (port 995) (ssl? #t))))) + (service-configuration + (kind "lmtp") + (client-limit 1) + (process-limit 0) + (listeners + (list (unix-listener-configuration (path "lmtp") (mode "0666"))))) + (service-configuration + (kind "imap") + (client-limit 1) + (process-limit 1024)) + (service-configuration + (kind "pop3") + (client-limit 1) + (process-limit 1024)) + (service-configuration + (kind "auth") + (service-count 0) + (client-limit 0) + (process-limit 1) + (listeners + (list (unix-listener-configuration (path "auth-userdb"))))) + (service-configuration + (kind "auth-worker") + (client-limit 1) + (process-limit 0)) + (service-configuration + (kind "dict") + (client-limit 1) + (process-limit 0) + (listeners (list (unix-listener-configuration (path "dict"))))))) + "List of services to enable. Available services include @samp{imap}, +@samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and +@samp{lmtp}.")) (define-configuration opaque-dovecot-configuration (dovecot -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v4 4/8] services: dovecot: Only serialize settings with non-empty values. 2020-09-08 13:53 ` [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 2/8] services: dovecot: Use modules via symlink to system profile Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 3/8] services: dovecot: Serialize global settings first Alexey Abramov @ 2020-09-08 13:53 ` Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 5/8] services: dovecot: Add 'mail-attribute-dict' configuration option Alexey Abramov ` (4 subsequent siblings) 7 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-09-08 13:53 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (serialize-space-separated-string-list): Protocols might have custom settings, which are not supported by other protocols. To prevent dovecot/services from crashing, serialize settings that hold non-empty values only. --- gnu/services/mail.scm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index a3c48bdb99..6e166af2be 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -99,7 +99,9 @@ (and (string? x) (not (string-index x #\space)))) val))) (define (serialize-space-separated-string-list field-name val) - (serialize-field field-name (string-join val " "))) + (match val + (() #f) + (_ (serialize-field field-name (string-join val " "))))) (define (comma-separated-string-list? val) (and (list? val) -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v4 5/8] services: dovecot: Add 'mail-attribute-dict' configuration option. 2020-09-08 13:53 ` [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory Alexey Abramov ` (2 preceding siblings ...) 2020-09-08 13:53 ` [bug#42899] [PATCH v4 4/8] services: dovecot: Only serialize settings with non-empty values Alexey Abramov @ 2020-09-08 13:53 ` Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 6/8] services: dovecot: Add 'imap-metadata?' protocol " Alexey Abramov ` (3 subsequent siblings) 7 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-09-08 13:53 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (dovecot-configuration): Define 'mail-attribute-dict' directive to support IMAP METADATA extension.: * doc/guix.texi (Mail Services): Document it. --- doc/guix.texi | 15 +++++++++++++++ gnu/services/mail.scm | 11 +++++++++++ 2 files changed, 26 insertions(+) diff --git a/doc/guix.texi b/doc/guix.texi index 61b65db35b..6d6912febf 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -18491,6 +18491,21 @@ could allow a user to delete others' mailboxes, or @code{ln -s @samp{""}. @end deftypevr +@deftypevr {@code{dovecot-configuration} parameter} string mail-attribute-dict +Activate the metadata storage of @code{IMAP METADATA} extension +@uref{https://tools.ietf.org/html/rfc5464,RFC@tie{}5464}. The goal of +the METADATA extension is to provide a means for clients to set and +retrieve 'annotations' or 'metadata' on an IMAP server. The annotations +can be associated with specific mailboxes or the server as a whole. The +server can choose to support only server annotations or both server and +mailbox annotations. For example, a general comment being added to a +mailbox may have an entry name of '/comment' and a value of 'Really +useful mailbox' + +Defaults to @samp{""}. + +@end deftypevr + @deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access? Allow full file system access to clients. There's no access checks other than what the operating system does for the active UID/GID. It diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 6e166af2be..d8df5c82e4 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -1130,6 +1130,17 @@ disabled.") @samp{mdbox-rotate-size}. This setting currently works only in Linux with some file systems (ext4, xfs).") + (mail-attribute-dict + (string "") + "Activate the metadata storage of @code{IMAP METADATA} extension +@uref{https://tools.ietf.org/html/rfc5464, RFC@tie{}5464}. The goal of the +METADATA extension is to provide a means for clients to set and retrieve +'annotations' or 'metadata' on an IMAP server. The annotations can be +associated with specific mailboxes or the server as a whole. The server can +choose to support only server annotations or both server and mailbox +annotations. For example, a general comment being added to a mailbox may have +an entry name of '/comment' and a value of 'Really useful mailbox'") + (mail-attachment-dir (string "") "sdbox and mdbox support saving mail attachments to external files, -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v4 6/8] services: dovecot: Add 'imap-metadata?' protocol configuration option. 2020-09-08 13:53 ` [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory Alexey Abramov ` (3 preceding siblings ...) 2020-09-08 13:53 ` [bug#42899] [PATCH v4 5/8] services: dovecot: Add 'mail-attribute-dict' configuration option Alexey Abramov @ 2020-09-08 13:53 ` Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 7/8] services: dovecot: Add 'managesieve-notify-capability' option Alexey Abramov ` (2 subsequent siblings) 7 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-09-08 13:53 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (protocol-configuration): Define the option to be able to activate the IMAP METADATA commands over the imap protocol. * doc/guix.texi (Mail Services): Document it. --- doc/guix.texi | 11 +++++++++++ gnu/services/mail.scm | 8 +++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/doc/guix.texi b/doc/guix.texi index 6d6912febf..e5c1d9d2f2 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -17793,6 +17793,17 @@ This is used by imap (for shared users) and lda. It defaults to @samp{"/var/run/dovecot/auth-userdb"}. @end deftypevr +@deftypevr {@code{protocol-configuration} parameter} boolean imap-metadata? +Activate the commands of @code{IMAP METADATA} extension +@uref{https://tools.ietf.org/html/rfc5464,RFC@tie{}5464}. + +If activated, a dictionary needs to be configured, via the +@code{mail-attribute-dict} setting. + +Defaults to @samp{#f}. + +@end deftypevr + @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins Space separated list of plugins to load. @end deftypevr diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index d8df5c82e4..ee710303e7 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -348,7 +348,13 @@ This is used by imap (for shared users) and lda.") (mail-max-userip-connections (non-negative-integer 10) "Maximum number of IMAP connections allowed for a user from each IP -address. NOTE: The username is compared case-sensitively.")) +address. NOTE: The username is compared case-sensitively.") + (imap-metadata? + (boolean #f) + "Activate the commands of @code{IMAP METADATA} extension +@uref{https://tools.ietf.org/html/rfc5464, RFC@tie{}5464}. If activated, a +dictionary needs to be configured, via the @code{mail-attribute-dict} +setting.")) (define (serialize-protocol-configuration field-name val) (format #t "protocol ~a {\n" (protocol-configuration-name val)) -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v4 7/8] services: dovecot: Add 'managesieve-notify-capability' option. 2020-09-08 13:53 ` [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory Alexey Abramov ` (4 preceding siblings ...) 2020-09-08 13:53 ` [bug#42899] [PATCH v4 6/8] services: dovecot: Add 'imap-metadata?' protocol " Alexey Abramov @ 2020-09-08 13:53 ` Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 8/8] services: dovecot: Add 'managesieve-sieve-capability' option Alexey Abramov 2020-09-08 14:03 ` [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory Tobias Geerinckx-Rice via Guix-patches via 7 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-09-08 13:53 UTC (permalink / raw) To: 42899 * doc/guix.texi (Mail Services): Document it. * gnu/services/mail.scm (protocol-configuration): Define it. --- doc/guix.texi | 9 +++++++++ gnu/services/mail.scm | 8 +++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/guix.texi b/doc/guix.texi index e5c1d9d2f2..8c41a22652 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -17804,6 +17804,15 @@ Defaults to @samp{#f}. @end deftypevr +@deftypevr {@code{protocol-configuration} parameter} space-separated-string-list managesieve-notify-capabilities +Report notify capabilities by the managesieve service upon a client +connection. If left unassigned, these will be assigned dynamically +according to what the Sieve interpreter supports by default (after login +this may differ depending on the authenticated user). + +Defaults to @samp{()}. +@end deftypevr + @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins Space separated list of plugins to load. @end deftypevr diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index ee710303e7..8b57b42dfe 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -354,7 +354,13 @@ address. NOTE: The username is compared case-sensitively.") "Activate the commands of @code{IMAP METADATA} extension @uref{https://tools.ietf.org/html/rfc5464, RFC@tie{}5464}. If activated, a dictionary needs to be configured, via the @code{mail-attribute-dict} -setting.")) +setting.") + (managesieve-notify-capability + (space-separated-string-list '()) + "Report NOTIFY capabilities by the ManageSieve service upon a client +connection. If left unassigned, these will be assigned dynamically +according to what the Sieve interpreter supports by default.")) + (define (serialize-protocol-configuration field-name val) (format #t "protocol ~a {\n" (protocol-configuration-name val)) -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v4 8/8] services: dovecot: Add 'managesieve-sieve-capability' option. 2020-09-08 13:53 ` [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory Alexey Abramov ` (5 preceding siblings ...) 2020-09-08 13:53 ` [bug#42899] [PATCH v4 7/8] services: dovecot: Add 'managesieve-notify-capability' option Alexey Abramov @ 2020-09-08 13:53 ` Alexey Abramov 2020-09-08 14:03 ` [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory Tobias Geerinckx-Rice via Guix-patches via 7 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-09-08 13:53 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (protocol-configuration): Define it. * doc/guix.texi (Mail Services): Document it. --- doc/guix.texi | 9 +++++++++ gnu/services/mail.scm | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/doc/guix.texi b/doc/guix.texi index 8c41a22652..d28e7c1b5f 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -17813,6 +17813,15 @@ this may differ depending on the authenticated user). Defaults to @samp{()}. @end deftypevr +@deftypevr {@code{protocol-configuration} parameter} space-separated-string-list managesieve-sieve-capability +Report SIEVE capabilities by the ManageSieve service upon a client +connection. If left unassigned, these will be assigned dynamically +according to what the Sieve interpreter supports by default. + +Defaults to @samp{()}. + +@end deftypevr + @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins Space separated list of plugins to load. @end deftypevr diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 8b57b42dfe..91d7041636 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -359,7 +359,12 @@ setting.") (space-separated-string-list '()) "Report NOTIFY capabilities by the ManageSieve service upon a client connection. If left unassigned, these will be assigned dynamically -according to what the Sieve interpreter supports by default.")) +according to what the Sieve interpreter supports by default.") + (managesieve-sieve-capability + (space-separated-string-list '()) + "Report SIEVE capabilities by the ManageSieve service upon a client ++connection. If left unassigned, these will be assigned dynamically ++according to what the Sieve interpreter supports by default.")) (define (serialize-protocol-configuration field-name val) -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory. 2020-09-08 13:53 ` [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory Alexey Abramov ` (6 preceding siblings ...) 2020-09-08 13:53 ` [bug#42899] [PATCH v4 8/8] services: dovecot: Add 'managesieve-sieve-capability' option Alexey Abramov @ 2020-09-08 14:03 ` Tobias Geerinckx-Rice via Guix-patches via 2020-09-08 14:21 ` Alexey Abramov 7 siblings, 1 reply; 61+ messages in thread From: Tobias Geerinckx-Rice via Guix-patches via @ 2020-09-08 14:03 UTC (permalink / raw) To: Alexey Abramov; +Cc: 42899 Alexey, On 2020-09-08 13:53, Alexey Abramov wrote: > v4 Thanks! What's changed in v4? I've been running a Dovecot with your outstanding patches for a week now, with 0 angry users; I'll review & try to push them later today. Kind regards, T G-R Sent from a Web browser. Excuse or enjoy my brevity. ^ permalink raw reply [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory. 2020-09-08 14:03 ` [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory Tobias Geerinckx-Rice via Guix-patches via @ 2020-09-08 14:21 ` Alexey Abramov 0 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-09-08 14:21 UTC (permalink / raw) To: Tobias Geerinckx-Rice; +Cc: 42899 Hi, Tobias Geerinckx-Rice <me@tobias.gr> writes: > Alexey, > > On 2020-09-08 13:53, Alexey Abramov wrote: >> v4 > > Thanks! What's changed in v4? > > I've been running a Dovecot with your outstanding patches for a week > now, with 0 angry users; I'll review & try to push them later today. That was quick, thanks! Glad to hear everything is OK. Well, this time I sent a cover letter to a guix-devel only for some reason. =( I described the changes in general. V4 doesn't have anything new. I just rebase v3 and provide v4 to let you guys apply/merge/work with them easier. Well, at least, I think it would be easier. -- Alexey ^ permalink raw reply [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v5 0/6] Dovecot improvements 2020-08-17 9:27 [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole Alexey Abramov ` (4 preceding siblings ...) 2020-09-08 13:53 ` [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory Alexey Abramov @ 2020-10-20 15:06 ` Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 1/6] gnu: dovecot: Set moduledir to global directory Alexey Abramov ` (5 more replies) 2020-12-25 16:15 ` [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole Alexey Abramov via web 2024-11-21 12:25 ` [bug#42899] [PATCH v6 0/3] services: dovecot: Add pigeonhole support Alexey Abramov via Guix-patches via 7 siblings, 6 replies; 61+ messages in thread From: Alexey Abramov @ 2020-10-20 15:06 UTC (permalink / raw) To: 42899 I have updated the series. Dovecot modules are provided via computed set of modules, which is available via /usr/lib/dovecot symlink. All other linux distribution uses the very same location, so I followed the same rule. Alexey Abramov (5): services: dovecot: Provide plugins through a /gnu/store directory. services: dovecot: Add 'mail-attribute-dict' configuration option. services: dovecot: Add 'imap-metadata?' protocol configuration option. services: dovecot: Add 'managesieve-notify-capability' option. services: dovecot: Add 'managesieve-sieve-capability' option. Efraim Flashner (1): gnu: dovecot: Set moduledir to global directory. doc/guix.texi | 52 ++++++++++++++++++++++++++ gnu/packages/mail.scm | 9 ++++- gnu/services/mail.scm | 85 +++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 141 insertions(+), 5 deletions(-) -- 2.28.0 ^ permalink raw reply [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v5 1/6] gnu: dovecot: Set moduledir to global directory. 2020-10-20 15:06 ` [bug#42899] [PATCH v5 0/6] Dovecot improvements Alexey Abramov @ 2020-10-20 15:06 ` Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 2/6] services: dovecot: Provide plugins through a /gnu/store directory Alexey Abramov ` (4 subsequent siblings) 5 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-10-20 15:06 UTC (permalink / raw) To: 42899; +Cc: Efraim Flashner From: Efraim Flashner <efraim@flashner.co.il> * gnu/packages/mail.scm (dovecot)[arguments]: Add configure-flag to set moduledir. Adjust custom 'install phase to override moduledir so it successfully installs. --- gnu/packages/mail.scm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 5056098806..ea53787ce0 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -1579,7 +1579,8 @@ facilities for checking incoming mail.") `(#:configure-flags '("--sysconfdir=/etc" "--localstatedir=/var" "--with-sqlite" ; not auto-detected - "--with-lucene") ; not auto-detected + "--with-lucene" ; not auto-detected + "--with-moduledir=/usr/lib/dovecot") #:phases (modify-phases %standard-phases (add-after 'unpack 'patch-file-names @@ -1596,9 +1597,13 @@ facilities for checking incoming mail.") (("cat") (which "cat"))) #t)) (replace 'install - (lambda* (#:key make-flags #:allow-other-keys) + (lambda* (#:key outputs make-flags #:allow-other-keys) + ;; The .la files don't like having the moduledir moved. + (for-each delete-file (find-files "." "\\.la")) ;; Simple hack to avoid installing a trivial README in /etc. (apply invoke "make" "install" "sysconfdir=/tmp/bogus" + (string-append "moduledir=" (assoc-ref outputs "out") + "/lib/dovecot") make-flags)))))) (home-page "https://www.dovecot.org") (synopsis "Secure POP3/IMAP server") -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v5 2/6] services: dovecot: Provide plugins through a /gnu/store directory. 2020-10-20 15:06 ` [bug#42899] [PATCH v5 0/6] Dovecot improvements Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 1/6] gnu: dovecot: Set moduledir to global directory Alexey Abramov @ 2020-10-20 15:06 ` Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 3/6] services: dovecot: Add 'mail-attribute-dict' configuration option Alexey Abramov ` (3 subsequent siblings) 5 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-10-20 15:06 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (package-list?, serialize-package-list): * gnu/services/mail.scm (dovecot-configuration)[extensions]: New field. The field lets you provide a list of dovecot plugins that need to be available during the runtime. A union of the set of modules will be created on the activation time. * gnu/services/mail.scm (opaque-dovecot-configuration)[extensions]: Likewise. * gnu/services/mail.scm (%dovecot-moduledir): New function. * gnu/services/mail.scm (%dovecot-activation): Add step to compute a set of modules, and provide them over the shared link at /usr/lib/dovecot. * doc/guix.texi (Mail Services)[extension]: Add documentation. --- doc/guix.texi | 8 +++++++ gnu/services/mail.scm | 55 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 51dc42e5a2..13cd86779e 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -18404,6 +18404,14 @@ Available @code{dovecot-configuration} fields are: The dovecot package. @end deftypevr +@deftypevr {@code{dovecot-configuration} parameter} package-list extensions +Plugins and extensions to the Dovecot package. Specify a list of +dovecot plugins that needs to be available for dovecot and its modules. + +Defaults to @samp{()}. + +@end deftypevr + @deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen A list of IPs or hosts where to listen for connections. @samp{*} listens on all IPv4 interfaces, @samp{::} listens on all IPv6 diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 71fa975b5d..b49fc07916 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -468,11 +468,21 @@ as @code{#t}.)") (serialize-namespace-configuration field-name val)) val)) +(define (package-list? val) + (and (list? val) (and-map package? val))) +(define (serialize-package-list field-name val) + #f) + (define-configuration dovecot-configuration (dovecot (package dovecot) "The dovecot package.") + (extensions + (package-list '()) + "Plugins and extensions to the Dovecot package. Specify a list of dovecot +plugins that needs to be available for dovecot and its modules.") + (listen (comma-separated-string-list '("*" "::")) "A list of IPs or hosts where to listen in for connections. @samp{*} @@ -1439,6 +1449,11 @@ greyed out, instead of only later giving \"not selectable\" popup error. (package dovecot) "The dovecot package.") + (extensions + (package-list '()) + "Plugins and extensions to the Dovecot package. Specify a list of dovecot +plugins that needs to be available for dovecot and its modules.") + (string (string (configuration-missing-field 'opaque-dovecot-configuration 'string)) @@ -1464,6 +1479,29 @@ greyed out, instead of only later giving \"not selectable\" popup error. (home-directory "/var/empty") (shell (file-append shadow "/sbin/nologin"))))) +(define (%dovecot-moduledir packages) + ;; Create a union of the set of modules and dovecot itself. + (computed-file + "dovecot-moduledir" + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + (mkdir #$output) + (for-each + (lambda (package) + (let ((path (string-append package "/lib/dovecot"))) + (for-each + (lambda (src) + (let* ((tail (substring src (string-length path))) + (dst (string-append #$output tail))) + (mkdir-p (dirname dst)) + (if (file-exists? dst) + (format (current-error-port) "warning: ~a exists\n" dst) + (symlink src dst)))) + (find-files path)))) + (list #$@packages)) + #t)))) + (define (%dovecot-activation config) ;; Activation gexp. (let ((config-str @@ -1474,7 +1512,15 @@ greyed out, instead of only later giving \"not selectable\" popup error. (with-output-to-string (lambda () (serialize-configuration config - dovecot-configuration-fields))))))) + dovecot-configuration-fields)))))) + (moduledir-directory + (cond + ((opaque-dovecot-configuration? config) + (%dovecot-moduledir (cons* (opaque-dovecot-configuration-dovecot config) + (opaque-dovecot-configuration-extensions config)))) + (else + (%dovecot-moduledir (cons* (dovecot-configuration-dovecot config) + (dovecot-configuration-extensions config))))))) #~(begin (use-modules (guix build utils)) (define (mkdir-p/perms directory owner perms) @@ -1521,13 +1567,18 @@ greyed out, instead of only later giving \"not selectable\" popup error. (else (format (current-error-port) "Failed to create public key at ~a.\n" public-key))))) - (let ((user (getpwnam "dovecot"))) + (let ((user (getpwnam "dovecot")) + (moduledir-symlink "/usr/lib/dovecot")) (mkdir-p/perms "/var/run/dovecot" user #o755) (mkdir-p/perms "/var/lib/dovecot" user #o755) (mkdir-p/perms "/etc/dovecot" user #o755) (copy-file #$(plain-file "dovecot.conf" config-str) "/etc/dovecot/dovecot.conf") (mkdir-p/perms "/etc/dovecot/private" user #o700) + (mkdir-p (dirname moduledir-symlink)) + (when (file-exists? moduledir-symlink) + (delete-file moduledir-symlink)) + (symlink #$moduledir-directory moduledir-symlink) (create-self-signed-certificate-if-absent #:private-key "/etc/dovecot/private/default.pem" #:public-key "/etc/dovecot/default.pem" -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v5 3/6] services: dovecot: Add 'mail-attribute-dict' configuration option. 2020-10-20 15:06 ` [bug#42899] [PATCH v5 0/6] Dovecot improvements Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 1/6] gnu: dovecot: Set moduledir to global directory Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 2/6] services: dovecot: Provide plugins through a /gnu/store directory Alexey Abramov @ 2020-10-20 15:06 ` Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 4/6] services: dovecot: Add 'imap-metadata?' protocol " Alexey Abramov ` (2 subsequent siblings) 5 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-10-20 15:06 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (dovecot-configuration): Define 'mail-attribute-dict' directive to support IMAP METADATA extension.: * doc/guix.texi (Mail Services): Document it. --- doc/guix.texi | 15 +++++++++++++++ gnu/services/mail.scm | 11 +++++++++++ 2 files changed, 26 insertions(+) diff --git a/doc/guix.texi b/doc/guix.texi index 13cd86779e..d30cd2c86b 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -19134,6 +19134,21 @@ could allow a user to delete others' mailboxes, or @code{ln -s @samp{""}. @end deftypevr +@deftypevr {@code{dovecot-configuration} parameter} string mail-attribute-dict +Activate the metadata storage of @code{IMAP METADATA} extension +@uref{https://tools.ietf.org/html/rfc5464,RFC@tie{}5464}. The goal of +the METADATA extension is to provide a means for clients to set and +retrieve 'annotations' or 'metadata' on an IMAP server. The annotations +can be associated with specific mailboxes or the server as a whole. The +server can choose to support only server annotations or both server and +mailbox annotations. For example, a general comment being added to a +mailbox may have an entry name of '/comment' and a value of 'Really +useful mailbox' + +Defaults to @samp{""}. + +@end deftypevr + @deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access? Allow full file system access to clients. There's no access checks other than what the operating system does for the active UID/GID. It diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index b49fc07916..caa8bc5893 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -1136,6 +1136,17 @@ disabled.") @samp{mdbox-rotate-size}. This setting currently works only in Linux with some file systems (ext4, xfs).") + (mail-attribute-dict + (string "") + "Activate the metadata storage of @code{IMAP METADATA} extension +@uref{https://tools.ietf.org/html/rfc5464, RFC@tie{}5464}. The goal of the +METADATA extension is to provide a means for clients to set and retrieve +'annotations' or 'metadata' on an IMAP server. The annotations can be +associated with specific mailboxes or the server as a whole. The server can +choose to support only server annotations or both server and mailbox +annotations. For example, a general comment being added to a mailbox may have +an entry name of '/comment' and a value of 'Really useful mailbox'") + (mail-attachment-dir (string "") "sdbox and mdbox support saving mail attachments to external files, -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v5 4/6] services: dovecot: Add 'imap-metadata?' protocol configuration option. 2020-10-20 15:06 ` [bug#42899] [PATCH v5 0/6] Dovecot improvements Alexey Abramov ` (2 preceding siblings ...) 2020-10-20 15:06 ` [bug#42899] [PATCH v5 3/6] services: dovecot: Add 'mail-attribute-dict' configuration option Alexey Abramov @ 2020-10-20 15:06 ` Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 5/6] services: dovecot: Add 'managesieve-notify-capability' option Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 6/6] services: dovecot: Add 'managesieve-sieve-capability' option Alexey Abramov 5 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-10-20 15:06 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (protocol-configuration): Define the option to be able to activate the IMAP METADATA commands over the imap protocol. * doc/guix.texi (Mail Services): Document it. --- doc/guix.texi | 11 +++++++++++ gnu/services/mail.scm | 8 +++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/doc/guix.texi b/doc/guix.texi index d30cd2c86b..d915d004c9 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -18436,6 +18436,17 @@ This is used by imap (for shared users) and lda. It defaults to @samp{"/var/run/dovecot/auth-userdb"}. @end deftypevr +@deftypevr {@code{protocol-configuration} parameter} boolean imap-metadata? +Activate the commands of @code{IMAP METADATA} extension +@uref{https://tools.ietf.org/html/rfc5464,RFC@tie{}5464}. + +If activated, a dictionary needs to be configured, via the +@code{mail-attribute-dict} setting. + +Defaults to @samp{#f}. + +@end deftypevr + @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins Space separated list of plugins to load. @end deftypevr diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index caa8bc5893..0c21da8891 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -348,7 +348,13 @@ This is used by imap (for shared users) and lda.") (mail-max-userip-connections (non-negative-integer 10) "Maximum number of IMAP connections allowed for a user from each IP -address. NOTE: The username is compared case-sensitively.")) +address. NOTE: The username is compared case-sensitively.") + (imap-metadata? + (boolean #f) + "Activate the commands of @code{IMAP METADATA} extension +@uref{https://tools.ietf.org/html/rfc5464, RFC@tie{}5464}. If activated, a +dictionary needs to be configured, via the @code{mail-attribute-dict} +setting.")) (define (serialize-protocol-configuration field-name val) (format #t "protocol ~a {\n" (protocol-configuration-name val)) -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v5 5/6] services: dovecot: Add 'managesieve-notify-capability' option. 2020-10-20 15:06 ` [bug#42899] [PATCH v5 0/6] Dovecot improvements Alexey Abramov ` (3 preceding siblings ...) 2020-10-20 15:06 ` [bug#42899] [PATCH v5 4/6] services: dovecot: Add 'imap-metadata?' protocol " Alexey Abramov @ 2020-10-20 15:06 ` Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 6/6] services: dovecot: Add 'managesieve-sieve-capability' option Alexey Abramov 5 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-10-20 15:06 UTC (permalink / raw) To: 42899 * doc/guix.texi (Mail Services): Document it. * gnu/services/mail.scm (protocol-configuration): Define it. --- doc/guix.texi | 9 +++++++++ gnu/services/mail.scm | 8 +++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/guix.texi b/doc/guix.texi index d915d004c9..c033868baa 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -18447,6 +18447,15 @@ Defaults to @samp{#f}. @end deftypevr +@deftypevr {@code{protocol-configuration} parameter} space-separated-string-list managesieve-notify-capabilities +Report notify capabilities by the managesieve service upon a client +connection. If left unassigned, these will be assigned dynamically +according to what the Sieve interpreter supports by default (after login +this may differ depending on the authenticated user). + +Defaults to @samp{()}. +@end deftypevr + @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins Space separated list of plugins to load. @end deftypevr diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 0c21da8891..2066661907 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -354,7 +354,13 @@ address. NOTE: The username is compared case-sensitively.") "Activate the commands of @code{IMAP METADATA} extension @uref{https://tools.ietf.org/html/rfc5464, RFC@tie{}5464}. If activated, a dictionary needs to be configured, via the @code{mail-attribute-dict} -setting.")) +setting.") + (managesieve-notify-capability + (space-separated-string-list '()) + "Report NOTIFY capabilities by the ManageSieve service upon a client +connection. If left unassigned, these will be assigned dynamically +according to what the Sieve interpreter supports by default.")) + (define (serialize-protocol-configuration field-name val) (format #t "protocol ~a {\n" (protocol-configuration-name val)) -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v5 6/6] services: dovecot: Add 'managesieve-sieve-capability' option. 2020-10-20 15:06 ` [bug#42899] [PATCH v5 0/6] Dovecot improvements Alexey Abramov ` (4 preceding siblings ...) 2020-10-20 15:06 ` [bug#42899] [PATCH v5 5/6] services: dovecot: Add 'managesieve-notify-capability' option Alexey Abramov @ 2020-10-20 15:06 ` Alexey Abramov 5 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov @ 2020-10-20 15:06 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (protocol-configuration): Define it. * doc/guix.texi (Mail Services): Document it. --- doc/guix.texi | 9 +++++++++ gnu/services/mail.scm | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/doc/guix.texi b/doc/guix.texi index c033868baa..a77e030176 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -18456,6 +18456,15 @@ this may differ depending on the authenticated user). Defaults to @samp{()}. @end deftypevr +@deftypevr {@code{protocol-configuration} parameter} space-separated-string-list managesieve-sieve-capability +Report SIEVE capabilities by the ManageSieve service upon a client +connection. If left unassigned, these will be assigned dynamically +according to what the Sieve interpreter supports by default. + +Defaults to @samp{()}. + +@end deftypevr + @deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins Space separated list of plugins to load. @end deftypevr diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 2066661907..06d9af829d 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -359,7 +359,12 @@ setting.") (space-separated-string-list '()) "Report NOTIFY capabilities by the ManageSieve service upon a client connection. If left unassigned, these will be assigned dynamically -according to what the Sieve interpreter supports by default.")) +according to what the Sieve interpreter supports by default.") + (managesieve-sieve-capability + (space-separated-string-list '()) + "Report SIEVE capabilities by the ManageSieve service upon a client ++connection. If left unassigned, these will be assigned dynamically ++according to what the Sieve interpreter supports by default.")) (define (serialize-protocol-configuration field-name val) -- 2.28.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole. 2020-08-17 9:27 [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole Alexey Abramov ` (5 preceding siblings ...) 2020-10-20 15:06 ` [bug#42899] [PATCH v5 0/6] Dovecot improvements Alexey Abramov @ 2020-12-25 16:15 ` Alexey Abramov via web 2024-07-16 21:37 ` Thomas Ieong 2024-11-21 12:25 ` [bug#42899] [PATCH v6 0/3] services: dovecot: Add pigeonhole support Alexey Abramov via Guix-patches via 7 siblings, 1 reply; 61+ messages in thread From: Alexey Abramov via web @ 2020-12-25 16:15 UTC (permalink / raw) To: 42899 Just a friendly reminder. Please let me know what you think. Or maybe I missed something. ^ permalink raw reply [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole. 2020-12-25 16:15 ` [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole Alexey Abramov via web @ 2024-07-16 21:37 ` Thomas Ieong 0 siblings, 0 replies; 61+ messages in thread From: Thomas Ieong @ 2024-07-16 21:37 UTC (permalink / raw) To: Alexey Abramov via web; +Cc: 42899 Hey, I'm slowly getting back into contributing to guix again, gonna apply these patchs and see if we can still make it work. ^ permalink raw reply [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v6 0/3] services: dovecot: Add pigeonhole support 2020-08-17 9:27 [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole Alexey Abramov ` (6 preceding siblings ...) 2020-12-25 16:15 ` [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole Alexey Abramov via web @ 2024-11-21 12:25 ` Alexey Abramov via Guix-patches via 2024-11-21 12:25 ` [bug#42899] [PATCH v6 1/3] gnu: dovecot: Set moduledir to global directory Alexey Abramov via Guix-patches via ` (2 more replies) 7 siblings, 3 replies; 61+ messages in thread From: Alexey Abramov via Guix-patches via @ 2024-11-21 12:25 UTC (permalink / raw) To: 42899 Hi everyone, It is been a while.. I add some changes to the previous series. - I changed the location of modules to /usr/lib/dovecot instead of /etc/dovecot. Don't know why). /usr/lib/dovecot seems natural to me. - I renamed `%dovecot-moduledir' to make-dovecot-moduledir, and now use union-build to create the union of modules. - %dovecot-activation uses switch-symlinks now. - I changed the tests a little bit, so that email will go through a simple sieve script. Alexey Abramov (3): gnu: dovecot: Set moduledir to global directory. services: dovecot: Provide plugins through a /gnu/store directory. tests: dovecot: Add sieve. doc/guix.texi | 19 ++++++++++++ gnu/packages/mail.scm | 8 ++++-- gnu/services/mail.scm | 44 ++++++++++++++++++++++++++-- gnu/tests/mail.scm | 67 +++++++++++++++++++++++++++++++++++++++---- 4 files changed, 129 insertions(+), 9 deletions(-) -- 2.46.0 ^ permalink raw reply [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v6 1/3] gnu: dovecot: Set moduledir to global directory. 2024-11-21 12:25 ` [bug#42899] [PATCH v6 0/3] services: dovecot: Add pigeonhole support Alexey Abramov via Guix-patches via @ 2024-11-21 12:25 ` Alexey Abramov via Guix-patches via 2024-11-21 12:25 ` [bug#42899] [PATCH v6 2/3] services: dovecot: Provide plugins through a /gnu/store directory Alexey Abramov via Guix-patches via 2024-11-21 12:25 ` [bug#42899] [PATCH v6 3/3] tests: dovecot: Add sieve Alexey Abramov via Guix-patches via 2 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov via Guix-patches via @ 2024-11-21 12:25 UTC (permalink / raw) To: 42899 * gnu/packages/mail.scm (dovecot)[arguments]: Add configure-flag to set moduledir. Adjust custom 'install phase to override moduledir so it successfully installs. --- gnu/packages/mail.scm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index 636961aae79..1c537b70a27 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -2141,7 +2141,8 @@ (define-public dovecot `(#:configure-flags '("--sysconfdir=/etc" "--localstatedir=/var" "--with-sqlite" ; not auto-detected - "--with-lucene") ; not auto-detected + "--with-lucene" + "--with-moduledir=/usr/lib/dovecot") ; not auto-detected ;; The -rdynamic linker flag is needed for the backtrace() function to ;; have symbol names rather than just addresses. Dovecot's tests rely ;; on this, see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=962630. @@ -2161,9 +2162,12 @@ (define-public dovecot "src/lib-smtp/test-bin/sendmail-success.sh") (("cat") (which "cat"))))) (replace 'install - (lambda* (#:key make-flags #:allow-other-keys) + (lambda* (#:key outputs make-flags #:allow-other-keys) + ;; The .la files don't like having the moduledir moved. + (for-each delete-file (find-files "." "\\.la")) ;; Simple hack to avoid installing a trivial README in /etc. (apply invoke "make" "install" "sysconfdir=/tmp/bogus" + (string-append "moduledir=" (assoc-ref outputs "out") "/lib/dovecot") make-flags)))))) (home-page "https://www.dovecot.org") (synopsis "Secure POP3/IMAP server") -- 2.46.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v6 2/3] services: dovecot: Provide plugins through a /gnu/store directory. 2024-11-21 12:25 ` [bug#42899] [PATCH v6 0/3] services: dovecot: Add pigeonhole support Alexey Abramov via Guix-patches via 2024-11-21 12:25 ` [bug#42899] [PATCH v6 1/3] gnu: dovecot: Set moduledir to global directory Alexey Abramov via Guix-patches via @ 2024-11-21 12:25 ` Alexey Abramov via Guix-patches via 2024-11-21 12:25 ` [bug#42899] [PATCH v6 3/3] tests: dovecot: Add sieve Alexey Abramov via Guix-patches via 2 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov via Guix-patches via @ 2024-11-21 12:25 UTC (permalink / raw) To: 42899 * gnu/services/mail.scm (package-list?, serialize-package-list): * gnu/services/mail.scm (dovecot-configuration)[extensions]: New field. The field lets you provide a list of dovecot plugins that need to be available during the runtime. A union of the set of modules will be created on the activation time. * gnu/services/mail.scm (opaque-dovecot-configuration)[extensions]: Likewise. * gnu/services/mail.scm (make-dovecot-moduledir): New function. * gnu/services/mail.scm (%dovecot-activation): Add step to compute a set of modules, and provide them over the shared link at /usr/lib/dovecot. * doc/guix.texi (Mail Services)[extension]: Add documentation. Clarify the purpose and usage of the extensions parameter. Add an example showing how to enable Sieve filtering using dovecot-pigeonhole. Better explain the module directory structure and requirements. --- doc/guix.texi | 19 +++++++++++++++++++ gnu/services/mail.scm | 44 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 1c39628ffaf..8ab628af0a4 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -26629,6 +26629,25 @@ Available @code{dovecot-configuration} fields are: The dovecot package. @end deftypevr +@deftypevr {@code{dovecot-configuration} parameter} package-list extensions +A list of additional Dovecot plugin packages to make available at runtime. During +service activation, the @file{lib/dovecot} directory from each specified package +is combined with Dovecot's core modules into a unified module directory. + +For example, to enable Sieve filtering: + +@lisp +(extensions (list dovecot-pigeonhole)) +@end lisp + +Each package in the list must provide its modules at @file{lib/dovecot}, +as this is where @code{make-dovecot-moduledir} expects to find its +extensions. The service combines these directories to create a unified +module structure. + +The default value is an empty list, providing only core Dovecot functionality. +@end deftypevr + @deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen A list of IPs or hosts where to listen for connections. @samp{*} listens on all IPv4 interfaces, @samp{::} listens on all IPv6 diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm index 18b482272c7..ce0a37dc5f9 100644 --- a/gnu/services/mail.scm +++ b/gnu/services/mail.scm @@ -521,11 +521,21 @@ (define (serialize-list-of-namespace-configuration field-name val) (serialize-namespace-configuration field-name val)) val)) +(define (package-list? val) + (and (list? val) (and-map package? val))) +(define (serialize-package-list field-name val) + #f) + (define-configuration dovecot-configuration (dovecot (file-like dovecot) "The dovecot package.") + (extensions + (package-list '()) + "Plugins and extensions to the Dovecot package. Specify a list of dovecot +plugins that needs to be available for dovecot and its modules.") + (listen (comma-separated-string-list '("*" "::")) "A list of IPs or hosts where to listen in for connections. @samp{*} @@ -1109,7 +1119,7 @@ (define-configuration dovecot-configuration @item fcntl Use this if possible. Works with NFS too if lockd is used. @item flock -May not exist in all systems. Doesn't work with NFS. +May not exist in all systems. Doesn't work with NFS. @item lockf May not exist in all systems. Doesn't work with NFS. @end table @@ -1500,6 +1510,11 @@ (define-configuration opaque-dovecot-configuration (file-like dovecot) "The dovecot package.") + (extensions + (package-list '()) + "Plugins and extensions to the Dovecot package. Specify a list of dovecot +plugins that needs to be available for dovecot and its modules.") + (string (string (configuration-missing-field 'opaque-dovecot-configuration 'string)) @@ -1525,6 +1540,21 @@ (define %dovecot-accounts (home-directory "/var/empty") (shell (file-append shadow "/sbin/nologin"))))) +(define (make-dovecot-moduledir packages) + "Return a computed file containing a union of Dovecot module directories from PACKAGES. +Each package's '/lib/dovecot' directory is combined into a single location." + ;; Create a union of the set of modules and dovecot itself. + (with-imported-modules '((guix build union)) + (computed-file + "dovecot-moduledir" + #~(begin + (use-modules (guix build union) (srfi srfi-26)) + + (union-build #$output + (map (cut string-append <> + "/lib/dovecot") + (list #$@packages))))))) + (define (%dovecot-activation config) ;; Activation gexp. (let ((config-str @@ -1535,7 +1565,15 @@ (define (%dovecot-activation config) (with-output-to-string (lambda () (serialize-configuration config - dovecot-configuration-fields))))))) + dovecot-configuration-fields)))))) + (moduledir-directory + (cond + ((opaque-dovecot-configuration? config) + (make-dovecot-moduledir (cons* (opaque-dovecot-configuration-dovecot config) + (opaque-dovecot-configuration-extensions config)))) + (else + (make-dovecot-moduledir (cons* (dovecot-configuration-dovecot config) + (dovecot-configuration-extensions config))))))) (with-imported-modules (source-module-closure '((gnu build activation))) #~(begin (use-modules (guix build utils) (gnu build activation)) @@ -1586,6 +1624,8 @@ (define* (create-self-signed-certificate-if-absent (copy-file #$(plain-file "dovecot.conf" config-str) "/etc/dovecot/dovecot.conf") (mkdir-p/perms "/etc/dovecot/private" user #o700) + (mkdir-p "/usr/lib") + (switch-symlinks "/usr/lib/dovecot" #$moduledir-directory) (create-self-signed-certificate-if-absent #:private-key "/etc/dovecot/private/default.pem" #:public-key "/etc/dovecot/default.pem" -- 2.46.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
* [bug#42899] [PATCH v6 3/3] tests: dovecot: Add sieve. 2024-11-21 12:25 ` [bug#42899] [PATCH v6 0/3] services: dovecot: Add pigeonhole support Alexey Abramov via Guix-patches via 2024-11-21 12:25 ` [bug#42899] [PATCH v6 1/3] gnu: dovecot: Set moduledir to global directory Alexey Abramov via Guix-patches via 2024-11-21 12:25 ` [bug#42899] [PATCH v6 2/3] services: dovecot: Provide plugins through a /gnu/store directory Alexey Abramov via Guix-patches via @ 2024-11-21 12:25 ` Alexey Abramov via Guix-patches via 2 siblings, 0 replies; 61+ messages in thread From: Alexey Abramov via Guix-patches via @ 2024-11-21 12:25 UTC (permalink / raw) To: 42899 * gnu/tests/mail.scm (%dovecot-os): Add dovecot-pigeonhole and simple imapsieve configuration. * gnu/tests/mail.scm (run-dovecot-test): Define simple sieve script. Add SELECT TESTBOX step to let dovecot properly do mailbox synchronization. --- gnu/tests/mail.scm | 67 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/gnu/tests/mail.scm b/gnu/tests/mail.scm index 176e7c1d074..3b498b5b575 100644 --- a/gnu/tests/mail.scm +++ b/gnu/tests/mail.scm @@ -297,10 +297,42 @@ (define %dovecot-os (service dhcp-client-service-type) (service dovecot-service-type (dovecot-configuration + (extensions (list dovecot-pigeonhole)) (disable-plaintext-auth? #f) + ;; Required for sieve! + (postmaster-address "postmaster@komputilo") (ssl? "no") (auth-mechanisms '("anonymous")) (auth-anonymous-username "alice") + (protocols + (list (protocol-configuration + (name "imap") + (mail-plugins '("$mail_plugins" "imap_sieve")) + (imap-metadata? #t)))) + + (plugin-configuration + (plugin-configuration + (entries (list + (cons 'sieve-global "/tmp") + (cons 'sieve-extensions "+editheader") + + (cons 'imapsieve-mailbox1-name "*") + (cons 'imapsieve-mailbox1-causes "APPEND") + ;; Run the script *before* the user scripts + (cons 'imapsieve-mailbox1-before "file:/tmp/main.sieve") + ;; We want to automatically remove original email + (cons 'imapsieve-expunge-discarded "yes") + + (cons 'sieve-trace-debug "yes") + (cons 'sieve-trace-dir "/tmp") + (cons 'sieve-trace-level "tests") + (cons 'sieve-plugins "sieve_imapsieve") + ;; You cannot run scripts anywhere you want + ;; Sieve allows you to only run scripts under + ;; sieve_pipe_bin_dir. + (cons 'sieve-pipe-bin-dir "/tmp") + )))) + (mail-location (string-append "maildir:~/Maildir" ":INBOX=~/Maildir/INBOX" @@ -334,6 +366,18 @@ (define* (message-length message #:key (encoding "iso-8859-1")) (define message "From: test@example.com\n\ Subject: Hello Nice to meet you!") + (define sieve-script + "require \"editheader\";\n +addheader \"X-Sieve-Filtered\" \"Guix\"; +") + ;; Install our sieve script + (marionette-eval + `(begin + (with-output-to-file "/tmp/main.sieve" + (lambda () + (display ,sieve-script)))) + marionette) + (test-runner-current (system-test-runner #$output)) (test-begin "dovecot") @@ -367,6 +411,19 @@ (define message "From: test@example.com\n\ ;; Create a TESTBOX mailbox (write-line "a CREATE TESTBOX" imap) (read-line imap) ;OK + ;; Select mailbox. This is required so that dovecot did + ;; synchronization correctly. + (write-line "a SELECT TESTBOX" imap) + ;; ("* FLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft)\r") + ;; ("* OK [PERMANENTFLAGS (\\Answered \\Flagged \\Deleted \\Seen \\Draft \\*)] Flags permitted.\r") + ;; ("* 1 EXISTS\r") + ;; ("* 1 RECENT\r") + ;; ("* OK [UNSEEN 1] First unseen.\r") + ;; ("* OK [UIDVALIDITY 1732177859] UIDs valid\r") + ;; ("* OK [UIDNEXT 3] Predicted next UID\r") + (for-each (lambda (n) + (read-line imap)) + (iota 7)) ;; Append a message to a TESTBOX mailbox (write-line (format #f "a APPEND TESTBOX {~a}" (number->string (message-length message))) @@ -380,18 +437,18 @@ (define message "From: test@example.com\n\ #t)) (test-equal "mail arrived" - message + (string-join (list "X-Sieve-Filtered: Guix" message) "\n") (marionette-eval '(begin (use-modules (ice-9 ftw) (ice-9 match) (rnrs io ports)) - - (let ((TESTBOX/new "/home/alice/Maildir/TESTBOX/new/")) - (match (scandir TESTBOX/new) + ;; XXX: We expect a new email in /cur directory + (let ((TESTBOX/cur "/home/alice/Maildir/TESTBOX/cur/")) + (match (scandir TESTBOX/cur) (("." ".." message-file) (call-with-input-file - (string-append TESTBOX/new message-file) + (string-append TESTBOX/cur message-file) get-string-all))))) marionette)) -- 2.46.0 ^ permalink raw reply related [flat|nested] 61+ messages in thread
end of thread, other threads:[~2024-11-21 14:32 UTC | newest] Thread overview: 61+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-08-17 9:27 [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 02/10] gnu: dovecot: Patch and provide a static path for module directory Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 03/10] services: dovecot: Use modules via symlink to system profile Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 04/10] gnu: dovecot-pigeonhole: Add new variable Alexey Abramov 2020-08-26 4:23 ` Tobias Geerinckx-Rice via Guix-patches via 2020-08-17 9:31 ` [bug#42899] [PATCH 05/10] services: dovecot: Serialize global settings first Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 06/10] services: dovecot: Only serialize settings with non-empty values Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 07/10] services: dovecot: Add 'mail-attribute-dict' configuration option Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 08/10] services: dovecot: Add 'imap-metadata?' protocol " Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 09/10] services: dovecot: Add 'managesieve-notify-capability' configuration Alexey Abramov 2020-08-17 9:31 ` [bug#42899] [PATCH 10/10] services: dovecot: Add 'managesieve-sieve-capability' option Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 02/10] gnu: dovecot: Patch and provide a static path for module directory Alexey Abramov 2020-08-19 7:41 ` Efraim Flashner 2020-08-19 9:44 ` Alexey Abramov 2020-08-23 20:45 ` Efraim Flashner 2020-08-24 10:01 ` Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 03/10] services: dovecot: Use modules via symlink to system profile Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 04/10] gnu: dovecot-pigeonhole: Add new variable Alexey Abramov 2020-08-23 21:16 ` Efraim Flashner 2020-08-24 10:47 ` Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 05/10] services: dovecot: Serialize global settings first Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 06/10] services: dovecot: Only serialize settings with non-empty values Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 07/10] services: dovecot: Add 'mail-attribute-dict' configuration option Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 08/10] services: dovecot: Add 'imap-metadata?' protocol " Alexey Abramov 2020-08-18 12:00 ` [bug#42899] [PATCH v2 09/10] services: dovecot: Add 'managesieve-notify-capability' option Alexey Abramov 2020-08-23 21:18 ` [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing Efraim Flashner 2020-08-23 21:23 ` [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole Efraim Flashner 2020-08-27 15:17 ` [bug#42899] [PATCH v3 1/9] gnu: dovecot: Set moduledir to global directory Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 2/9] services: dovecot: Use modules via symlink to system profile Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 3/9] gnu: dovecot-pigeonhole: Add new variable Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 4/9] services: dovecot: Serialize global settings first Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 5/9] services: dovecot: Only serialize settings with non-empty values Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 6/9] services: dovecot: Add 'mail-attribute-dict' configuration option Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 7/9] services: dovecot: Add 'imap-metadata?' protocol " Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 8/9] services: dovecot: Add 'managesieve-notify-capability' option Alexey Abramov 2020-08-27 15:17 ` [bug#42899] [PATCH v3 9/9] services: dovecot: Add 'managesieve-sieve-capability' option Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 2/8] services: dovecot: Use modules via symlink to system profile Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 3/8] services: dovecot: Serialize global settings first Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 4/8] services: dovecot: Only serialize settings with non-empty values Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 5/8] services: dovecot: Add 'mail-attribute-dict' configuration option Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 6/8] services: dovecot: Add 'imap-metadata?' protocol " Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 7/8] services: dovecot: Add 'managesieve-notify-capability' option Alexey Abramov 2020-09-08 13:53 ` [bug#42899] [PATCH v4 8/8] services: dovecot: Add 'managesieve-sieve-capability' option Alexey Abramov 2020-09-08 14:03 ` [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory Tobias Geerinckx-Rice via Guix-patches via 2020-09-08 14:21 ` Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 0/6] Dovecot improvements Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 1/6] gnu: dovecot: Set moduledir to global directory Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 2/6] services: dovecot: Provide plugins through a /gnu/store directory Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 3/6] services: dovecot: Add 'mail-attribute-dict' configuration option Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 4/6] services: dovecot: Add 'imap-metadata?' protocol " Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 5/6] services: dovecot: Add 'managesieve-notify-capability' option Alexey Abramov 2020-10-20 15:06 ` [bug#42899] [PATCH v5 6/6] services: dovecot: Add 'managesieve-sieve-capability' option Alexey Abramov 2020-12-25 16:15 ` [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole Alexey Abramov via web 2024-07-16 21:37 ` Thomas Ieong 2024-11-21 12:25 ` [bug#42899] [PATCH v6 0/3] services: dovecot: Add pigeonhole support Alexey Abramov via Guix-patches via 2024-11-21 12:25 ` [bug#42899] [PATCH v6 1/3] gnu: dovecot: Set moduledir to global directory Alexey Abramov via Guix-patches via 2024-11-21 12:25 ` [bug#42899] [PATCH v6 2/3] services: dovecot: Provide plugins through a /gnu/store directory Alexey Abramov via Guix-patches via 2024-11-21 12:25 ` [bug#42899] [PATCH v6 3/3] tests: dovecot: Add sieve Alexey Abramov via Guix-patches via
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/guix.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).