unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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; 62+ 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] 62+ 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
                     ` (3 more replies)
  7 siblings, 4 replies; 62+ 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] 62+ 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
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 62+ 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] 62+ 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
  2024-11-26  9:58   ` [bug#42899] [PATCH v6 0/3] services: dovecot: Add pigeonhole support Simon Streit
  3 siblings, 0 replies; 62+ 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] 62+ 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
  2024-11-26  9:58   ` [bug#42899] [PATCH v6 0/3] services: dovecot: Add pigeonhole support Simon Streit
  3 siblings, 0 replies; 62+ 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] 62+ messages in thread

* [bug#42899] [PATCH v6 0/3] services: dovecot: Add pigeonhole support
  2024-11-21 12:25 ` [bug#42899] [PATCH v6 0/3] services: dovecot: Add pigeonhole support Alexey Abramov via Guix-patches via
                     ` (2 preceding siblings ...)
  2024-11-21 12:25   ` [bug#42899] [PATCH v6 3/3] tests: dovecot: Add sieve Alexey Abramov via Guix-patches via
@ 2024-11-26  9:58   ` Simon Streit
  3 siblings, 0 replies; 62+ messages in thread
From: Simon Streit @ 2024-11-26  9:58 UTC (permalink / raw)
  To: 42899; +Cc: levenson

Hello Alexey,

Alexey Abramov via Guix-patches via <guix-patches@gnu.org> writes:

> - 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.

I applied the patches and got it working too. 


Kind regards

-- 
Simon




^ permalink raw reply	[flat|nested] 62+ messages in thread

end of thread, other threads:[~2024-11-26  9:59 UTC | newest]

Thread overview: 62+ 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
2024-11-26  9:58   ` [bug#42899] [PATCH v6 0/3] services: dovecot: Add pigeonhole support Simon Streit

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).