[PATCH 00/10] Dovecot improvements. Add support for pigeonhole.

OpenSubmitted by Alexey Abramov.
Details
4 participants
  • Efraim Flashner
  • Alexey Abramov via web
  • Alexey Abramov
  • Tobias Geerinckx-Rice
Owner
unassigned
Severity
normal
A
A
Alexey Abramov wrote on 17 Aug 2020 11:27
(address . guix-patches@gnu.org)
20200817092748.30057-1-levenson@mmer.org
Hi Guix,
I did some work on dovecot, and now can run it with sieve/managesievesupport. I followed the same aproach NixOS guys did. I patched moduledir inthe source code (/etc/dovecot/modules), and provide it as a symlink to currentsystem profiles lib/dovecot.
I also added fts plugin support for dovecot, added few more options for sieveprotocol 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
A
A
Alexey Abramov wrote on 17 Aug 2020 11:31
[PATCH 01/10] gnu: dovecot: Add lucene library to support fts indexing.
(address . 42899@debbugs.gnu.org)
20200817093124.30611-1-levenson@mmer.org
* 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(-)
Toggle diff (39 lines)diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scmindex 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
A
A
Alexey Abramov wrote on 17 Aug 2020 11:31
[PATCH 03/10] services: dovecot: Use modules via symlink to system profile.
(address . 42899@debbugs.gnu.org)
20200817093124.30611-3-levenson@mmer.org
* gnu/services/mail.scm (%dovecot-activation): Link the location with multipleplugins (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(-)
Toggle diff (33 lines)diff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 17 Aug 2020 11:31
[PATCH 04/10] gnu: dovecot-pigeonhole: Add new variable.
(address . 42899@debbugs.gnu.org)
20200817093124.30611-4-levenson@mmer.org
Signed-off-by: Alexey Abramov <levenson@mmer.org>--- gnu/packages/mail.scm | 56 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+)
Toggle diff (69 lines)diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scmindex 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
A
A
Alexey Abramov wrote on 17 Aug 2020 11:31
[PATCH 05/10] services: dovecot: Serialize global settings first.
(address . 42899@debbugs.gnu.org)
20200817093124.30611-5-levenson@mmer.org
* gnu/services/mail.scm (dovecot-configuration): To avoid dovecot warningmessages, 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(-)
Toggle diff (138 lines)diff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 17 Aug 2020 11:31
[PATCH 06/10] services: dovecot: Only serialize settings with non-empty values.
(address . 42899@debbugs.gnu.org)
20200817093124.30611-6-levenson@mmer.org
* gnu/services/mail.scm (serialize-space-separated-string-list): Protocolsmight have custom settings, which are not supported by other protocols. Toprevent dovecot/services from crashing, serialize settings that hold non-emptyvalues only.
Signed-off-by: Alexey Abramov <levenson@mmer.org>--- gnu/services/mail.scm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
Toggle diff (17 lines)diff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 17 Aug 2020 11:31
[PATCH 08/10] services: dovecot: Add 'imap-metadata?' protocol configuration option.
(address . 42899@debbugs.gnu.org)
20200817093124.30611-8-levenson@mmer.org
* 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(-)
Toggle diff (18 lines)diff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 17 Aug 2020 11:31
[PATCH 07/10] services: dovecot: Add 'mail-attribute-dict' configuration option.
(address . 42899@debbugs.gnu.org)
20200817093124.30611-7-levenson@mmer.org
* 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(+)
Toggle diff (18 lines)diff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 17 Aug 2020 11:31
[PATCH 09/10] services: dovecot: Add 'managesieve-notify-capability' configuration.
(address . 42899@debbugs.gnu.org)
20200817093124.30611-9-levenson@mmer.org
* 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(-)
Toggle diff (21 lines)diff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 17 Aug 2020 11:31
[PATCH 10/10] services: dovecot: Add 'managesieve-sieve-capability' option.
(address . 42899@debbugs.gnu.org)
20200817093124.30611-10-levenson@mmer.org
* 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(+)
Toggle diff (19 lines)diff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 17 Aug 2020 11:31
[PATCH 02/10] gnu: dovecot: Patch and provide a static path for module directory.
(address . 42899@debbugs.gnu.org)
20200817093124.30611-2-levenson@mmer.org
* 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
Toggle diff (180 lines)diff --git a/gnu/local.mk b/gnu/local.mkindex 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.scmindex 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.patchnew file mode 100644index 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
A
A
Alexey Abramov wrote on 18 Aug 2020 14:00
[PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing.
(address . 42899@debbugs.gnu.org)
20200818120037.30722-1-levenson@mmer.org
* 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(-)
Toggle diff (39 lines)diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scmindex 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
A
A
Alexey Abramov wrote on 18 Aug 2020 14:00
[PATCH v2 03/10] services: dovecot: Use modules via symlink to system profile.
(address . 42899@debbugs.gnu.org)
20200818120037.30722-3-levenson@mmer.org
* gnu/services/mail.scm (%dovecot-activation): Link the location with multipleplugins (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(-)
Toggle diff (59 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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-pluginsdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 18 Aug 2020 14:00
[PATCH v2 05/10] services: dovecot: Serialize global settings first.
(address . 42899@debbugs.gnu.org)
20200818120037.30722-5-levenson@mmer.org
* gnu/services/mail.scm (dovecot-configuration): To avoid dovecot warningmessages, 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(-)
Toggle diff (138 lines)diff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 18 Aug 2020 14:00
[PATCH v2 06/10] services: dovecot: Only serialize settings with non-empty values.
(address . 42899@debbugs.gnu.org)
20200818120037.30722-6-levenson@mmer.org
* gnu/services/mail.scm (serialize-space-separated-string-list): Protocolsmight have custom settings, which are not supported by other protocols. Toprevent dovecot/services from crashing, serialize settings that hold non-emptyvalues only.
Signed-off-by: Alexey Abramov <levenson@mmer.org>--- gnu/services/mail.scm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
Toggle diff (17 lines)diff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 18 Aug 2020 14:00
[PATCH v2 04/10] gnu: dovecot-pigeonhole: Add new variable.
(address . 42899@debbugs.gnu.org)
20200818120037.30722-4-levenson@mmer.org
Signed-off-by: Alexey Abramov <levenson@mmer.org>--- gnu/packages/mail.scm | 56 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+)
Toggle diff (69 lines)diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scmindex 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
A
A
Alexey Abramov wrote on 18 Aug 2020 14:00
[PATCH v2 08/10] services: dovecot: Add 'imap-metadata?' protocol configuration option.
(address . 42899@debbugs.gnu.org)
20200818120037.30722-8-levenson@mmer.org
* 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(-)
Toggle diff (43 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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 deftypevrdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 18 Aug 2020 14:00
[PATCH v2 07/10] services: dovecot: Add 'mail-attribute-dict' configuration option.
(address . 42899@debbugs.gnu.org)
20200818120037.30722-7-levenson@mmer.org
* 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(+)
Toggle diff (50 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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. Itdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 18 Aug 2020 14:00
[PATCH v2 09/10] services: dovecot: Add 'managesieve-notify-capability' option.
(address . 42899@debbugs.gnu.org)
20200818120037.30722-9-levenson@mmer.org
* 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(-)
Toggle diff (41 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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 deftypevrdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 18 Aug 2020 14:00
[PATCH v2 02/10] gnu: dovecot: Patch and provide a static path for module directory.
(address . 42899@debbugs.gnu.org)
20200818120037.30722-2-levenson@mmer.org
* 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
Toggle diff (180 lines)diff --git a/gnu/local.mk b/gnu/local.mkindex 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.scmindex 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.patchnew file mode 100644index 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
E
E
Efraim Flashner wrote on 19 Aug 2020 09:41
(name . Alexey Abramov)(address . levenson@mmer.org)(address . 42899@debbugs.gnu.org)
20200819074132.GE10528@E5400
How are all the XXX_MODULE_DIR variables set? Would it be possible tojust 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:
Toggle quote (197 lines)> * 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 8351Confidentiality cannot be guaranteed on emails sent or received unencrypted
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEoov0DD5VE3JmLRT3Qarn3Mo9g1EFAl8816kACgkQQarn3Mo9g1G8gg//el7x8zTGlew7YpJsC3oUvk8+O94dlsdyNR9Px1QPjVgEUxPCSwLTwMt2okQiQiTxtR60pw0RVHQS3YfBVDuDJqCvwfkjZzrt3/AthlG68rh99okEYs5Dh3kJSyO7gtNezxm/+nhmhB6f41PlZZF+hT/lR6v5QW745owQyumI7Rj/sp/0Mgy90+81Wp+65qUoe3Rc/YcPWGOTBeBYTSPaswzK5pXWENiqxGQZ4U2sIHHViwMdVwsH6JtrBHNkkm4rQIz+8AqBUiSlHagrEeJrz6n6X9FOg+CnqfIgtrZulxJJyc1+6MoJLgNePhc4oa1AlkZyvUFO6zfovsWirI0QnjlHJjkivWZZfIi4yMaEHsoQuSmtajLYt/cD4xT8F364ix9wEOtmKdYKY0MlGzOMGaos/lyygM/sDUPWbqNLm+ahEhK0fSuAJN5w0zmOPtgnFUriJvEx69SZhLLhqEe3cgvgGHNggiQgcSxU6Hepzz9fTfx2cNjalpFKq3+QBLcHjTaDHAOrDL7B7XLwyMM8zJDm7IjF1xJ7K+CxFO8zbYi8S5HOyEmBZu5JuKI67CDgf6Ail4G6oL87O6i3RIikBStKHAIGt9u98yLBJQgCv8H5twMi0r2wf39yyQi1LsUWUjVvfyt6zaRurufpi2idWCMaYCjz37ThM5ajsGJg2ig==y/Zt-----END PGP SIGNATURE-----

A
A
Alexey Abramov wrote on 19 Aug 2020 11:44
(name . Efraim Flashner)(address . efraim@flashner.co.il)(address . 42899@debbugs.gnu.org)
87lfib2cnf.fsf@mmer.org
Hi,
Efraim Flashner <efraim@flashner.co.il> writes:
Toggle quote (4 lines)> 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:
Toggle snippet (14 lines)-*- 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
Toggle snippet (12 lines)-*- 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
--Alexey
E
E
Efraim Flashner wrote on 23 Aug 2020 22:45
(name . Alexey Abramov)(address . levenson@mmer.org)(address . 42899@debbugs.gnu.org)
20200823204535.GA1392@E5400
On Wed, Aug 19, 2020 at 11:44:20AM +0200, Alexey Abramov wrote:
Toggle quote (10 lines)> 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 (withservices) that have configure flags for one directory and install to%outputs as expected. I came up with the attached patch to make thathappen.
Toggle quote (34 lines)> > 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 8351Confidentiality cannot be guaranteed on emails sent or received unencrypted
From e4dd3230739bca94896343d64c6756d346016296 Mon Sep 17 00:00:00 2001From: Efraim Flashner <efraim@flashner.co.il>Date: Sun, 23 Aug 2020 23:43:43 +0300Subject: [PATCH] gnu: dovecot: Set moduledir to global directory.
* gnu/packages/mail.scm (dovecot)[arguments]: Add configure-flag to setmoduledir. Adjust custom 'install phase to override moduledir so itsuccessfully installs.--- gnu/packages/mail.scm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
Toggle diff (31 lines)diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scmindex 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
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEoov0DD5VE3JmLRT3Qarn3Mo9g1EFAl9C1W8ACgkQQarn3Mo9g1FHQhAAi0yLjzfMF/yvwGKeYGVpQ8v794xuNW+L1V1GO7TMMBzUFLz+XsJbj81uh6Yrpw6N24+YtEKtZkCFRwGiD0EjlWhRpZUrIFGznRJs+TphDEix/Zkf8v1slg71YQmnRsKX3Y0Th3lXcYPqkLy6agVwTS1iucqdwd3orNObzbYeoE433P5K1P7PmsvOhSHBcIJ7TX1zfxEg2FcV3Z6GRHxlT2OYjndBaaenmS01DkHXEOH3UrRQVMnJircuEsxbgvF75IIf0DcvNpneNrC53uMcvddxB7Syavk+L64TbXgTPAr+gbW+e1QAajxu89tXbAM9miH7YFdnJWBzubn8WeKWRqK79UWzebO3kQFjV1mmmYCyknoBLbfsmIn3vxHkqUY3q6x9x3fRiOvxDA/Nf+9kI9s/YEyZ5GFyMRuxFuGwjZxxmTttU/pqkcJc2HPpG5aU71OR5lM5qwdMvek+HfbR8qfHtQkkQDTTqDvvw7P4c92EmnPq3713dFzeI4n0RRBuZMT9R3ESW1MMbTbWNV55tL+8wRlJnZaFCsYaiC8vlxJnK03qDtIJp+vv1XRGC9XHBL44kBjOKoaF1KRID+va0Ac+Zmssh9QQHqsuX+6xMLWK9bnqPlA2TANz7O1ZkJUaAJIT7k8F8JeK0C1Ri1dcPmRpPbegYpnd/vq5LRTNUpw==dFDq-----END PGP SIGNATURE-----

E
E
Efraim Flashner wrote on 23 Aug 2020 23:16
Re: [bug#42899] [PATCH v2 04/10] gnu: dovecot-pigeonhole: Add new variable.
(name . Alexey Abramov)(address . levenson@mmer.org)(address . 42899@debbugs.gnu.org)
20200823211651.GB1392@E5400
Make sure you run 'guix lint' on the package, some of the lines are toolong.
On Tue, Aug 18, 2020 at 02:00:32PM +0200, Alexey Abramov wrote:
Toggle quote (25 lines)> 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 anddovecot-2.3.11-pigeonhole-0.5.11.tar.gz?
Toggle quote (12 lines)> + (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 arenecessary here. Also, 'guix gc --references' show a reference todovecot, so that should go in inputs.
Toggle quote (14 lines)> + (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.
Toggle quote (8 lines)> + (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 thelinter complains once it hits 90. If you start a new line after 'out'then it should flow nicely.
Toggle quote (5 lines)> + #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 Sievelanguage'
Toggle quote (10 lines)> + (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
Toggle quote (11 lines)> +> (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 8351Confidentiality cannot be guaranteed on emails sent or received unencrypted
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEoov0DD5VE3JmLRT3Qarn3Mo9g1EFAl9C3MAACgkQQarn3Mo9g1HTIQ/5AR6dCQOjGxe8vDPlpz76qSCVMCg+YEkIZEu1o722H3ofAzkcjmK6zT9E+N24592XJCmqXE0Y8NKpMeap8TZtxTOOHOTQQ8bDAfsgM7BdblQNAFIHBFZFX+LMKNGbBfyZTMFs968ZBCYxr4KJd3w9vlATj2/asG5UBbgIqHBEbY4GY636/9D5P8/hMj3MMLZiTDEdqNBSWgQH8cT7BOvfpOjamkHfaq7ZbpMEN4f0PQcemmnJVN7do4FlGHnjjTrnvnh+SubNCD4vMkytKjpIv2hQeT58QcKtPMyg8UpWnzFbFUg5tRoIX0yCK5d6xy33NZ6u6q+DKN6CrRE2NjCqksbDRTWfVn8z4dawg30QnbX/vafQzG0rlawiwOJS5LX7maaIGNqQEI808Luv2MuJyUuLdJq296HBXdJYKa/qbLeqmu+lNkh9+A1VrjFo6J7cgM0o7yi64k6Nl2UY0pNk6i7i2rme+3p8yeqF/tSx/zZDolbTn3Bwst8YoQ7I71MDR69FH5ZrFEfj98yODfM2D4P5v+WAQ27qj9gARxhs4o4mPxdAmswJ1AIpl1k4xS6Zpv+qwtczIhb2v68gdf3ygdj9KY3jBLZVyEvchCgry1od3ss4q1icu6hBtP7gup+KlWVEmzR0Q1Iy0z5Ng7v4YtRvBi+ft3uK9MOmuqdHS5w==7ZJ5-----END PGP SIGNATURE-----

E
E
Efraim Flashner wrote on 23 Aug 2020 23:18
Re: [bug#42899] [PATCH v2 01/10] gnu: dovecot: Add lucene library to support fts indexing.
(name . Alexey Abramov)(address . levenson@mmer.org)(address . 42899@debbugs.gnu.org)
20200823211840.GC1392@E5400
I've sorted the added libraries alphabetically and pushed this patch.
On Tue, Aug 18, 2020 at 02:00:29PM +0200, Alexey Abramov wrote:
Toggle quote (52 lines)> * 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 8351Confidentiality cannot be guaranteed on emails sent or received unencrypted
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEoov0DD5VE3JmLRT3Qarn3Mo9g1EFAl9C3TAACgkQQarn3Mo9g1Ft2Q/+OicqChKqL7wfFIDQVRlqXa4lBOwTB9yrupIa7n3OKkj9eEeKCizsbyP23/EXvPclB4vP1ktnTCkk4hoBqxfOKbLI/pFyffsW+JxCegDrIW6VvMk/4XBQUnclv16tGYeyJzoMnkaHBpbPSwhqMT0tc+poLj216b426PhkYPntON2YhCvBUyt/xaYP8UXiNa4PYl/J+Cvu8ur9OrCfJGTUn4lT3JI+a1YSScQGIHD0l5LFfFlwElJo7XBOYpARyq6I7Qvxi0b8OLQ2AAUAgqPPuV++anoAs4+XG5MPEza7kjYCl0FB/V2jGamgmLDhdSUOj9GC37h3579huG1taBJGMxSHkR198khDXXogDpCe1igG/BiN7juXhrOihjtU6We/bMcyTU79X3mOOilePIQSHU8MCK7aeymg0HnVWhg+ape4qlHW+I/F/gsKCNukZx6S9Wq8Y7l1FyH31Zsj4II/20vYBwBjfPQSlsfQJ+er4LLk38zT0BgHByIW7vymxXYwUS/NIfrdEqSiAw1Rc14QOmnZ/0txeOFI3N4BRNRQzBJ1TCNGgTCJroISVZXIF/1vXtccZSClUpcbVxG2hgVvW0KQZnj0Q7LwmeGWRZf7blRNs3SnKu9O1ZdTs7fxtx2BkDENBGxj2JzgeOoCCuTW4dwhRqsUDiVZJ5jD6I6QKcs==Xx5q-----END PGP SIGNATURE-----

E
E
Efraim Flashner wrote on 23 Aug 2020 23:23
Re: [bug#42899] [PATCH 00/10] Dovecot improvements. Add support for pigeonhole.
(name . Alexey Abramov)(address . levenson@mmer.org)(address . 42899@debbugs.gnu.org)
20200823212304.GD1392@E5400
There's some changes to dovecot and the dovecot service here. I don'tuse the dovecot service so I don't really feel comfortable reviewing itin depth.
I believe some of the others who use the dovecot service will be comingby to test out those bits.

-- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנרGPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351Confidentiality cannot be guaranteed on emails sent or received unencrypted
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEoov0DD5VE3JmLRT3Qarn3Mo9g1EFAl9C3jgACgkQQarn3Mo9g1GZEw/+N0ck1HIQtICTDl4n1JLKMkoMUdl9x1CvjEvC3HpVIokDE+b5T7YyFyCf7Qyu1REpMHW0HKBOktpYouAb01mNoIwIlHWw8DzKa6dOJqZYwnK29cAFn77mgn0tFCGr71Pb7hFM1ZPfiBZb1M6kIhkg2wXWEk1qb74+tCBJnzsoOcLzoBlTOksjD5eFq7auaaS6OzLhJ+KWbKaLbV0QPO2kb25rpA3N90l6IX9swetIAniNM5/boVolidIyQV8r4PD0WMNeKSzDgvlkjmTrWEb9wIl8Gn29C25dj1NBajMVjOTp8CX7kt3dT9CVJA5CzbAtYlwc85WzimczJjSbs/+bTWi7s4vEK8TvWA44LQHAvferB8T6L7Jqxxz15d+XpdyCF6OxX1wASyoU7SAaJA1ERizH+h8EFvxi12AYhr4FE4CgBEWbCrz0QQ3rNt0pc2fyT3UZDfvkcqPSluE8nIVsdfd/cgoHOFOS0/ejOA2pPsPxDcR/Wf71wW3G8YXj+J2KNyJYi1nqajcV6Hx6oG2Z2tG9BDn27JJCJsBM70yMA+SaLifqe+W4xa+4eLg2xN0fIT5vDx4fBD2SEmJ1iqmlin24HUuE0o2k7KPX3C3WP3nzRHAqjYTzQFP+y+OH4zFc2uKJRK6ru76YWsZIu0buUfAwX3ixNzqQzkYJCTbNhEw==g0KK-----END PGP SIGNATURE-----

A
A
Alexey Abramov wrote on 24 Aug 2020 12:01
Re: [bug#42899] [PATCH v2 02/10] gnu: dovecot: Patch and provide a static path for module directory.
(name . Efraim Flashner)(address . efraim@flashner.co.il)(address . 42899@debbugs.gnu.org)
87blj07472.fsf@mmer.org
Efraim Flashner <efraim@flashner.co.il> writes:
Toggle quote (16 lines)> 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
A
A
Alexey Abramov wrote on 24 Aug 2020 12:47
Re: [bug#42899] [PATCH v2 04/10] gnu: dovecot-pigeonhole: Add new variable.
(name . Efraim Flashner)(address . efraim@flashner.co.il)(address . 42899@debbugs.gnu.org)
875z987237.fsf@mmer.org
Efraim Flashner <efraim@flashner.co.il> writes:
Toggle quote (4 lines)> Make sure you run 'guix lint' on the package, some of the lines are too> long.>
[...]
Toggle quote (4 lines)>> 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.
Toggle quote (2 lines)>
[...]
Toggle quote (5 lines)>> 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.
Toggle quote (2 lines)>
[...]
Toggle quote (5 lines)>> 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.
Toggle quote (2 lines)>
[...]
Toggle quote (5 lines)>> 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.
Toggle quote (2 lines)>
[...]
Toggle quote (4 lines)>> 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. =)
[...]
Toggle quote (3 lines)>> 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
--- /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
T
T
Tobias Geerinckx-Rice wrote on 26 Aug 2020 06:23
Re: [bug#42899] [PATCH 04/10] gnu: dovecot-pigeonhole: Add new variable.
(name . Alexey Abramov)(address . levenson@mmer.org)
878se2vxvm.fsf@nckx
Alexey,
Alexey Abramov 写道:
Toggle quote (2 lines)> Signed-off-by: Alexey Abramov <levenson@mmer.org>
No need to sign of on your own patches.
Toggle quote (2 lines)> +(define-public dovecot-pigeonhole
I've applied these patches on my mail server and will enjoy testing them. Thanks!
Kind regards,
T G-R
-----BEGIN PGP SIGNATURE-----
iHUEARYKAB0WIQT12iAyS4c9C3o4dnINsP+IT1VteQUCX0XjvQAKCRANsP+IT1VteXADAQC2U4g+doyp5nYgmdjRR009+TI6z4NyHsS6sBtdTEgu8gEAszKUHlMLlj953iKYJhV8D1qbee/h6VuGFg7pLv4RRQ0==yB73-----END PGP SIGNATURE-----
A
A
Alexey Abramov wrote on 27 Aug 2020 17:17
[PATCH v3 2/9] services: dovecot: Use modules via symlink to system profile.
(address . 42899@debbugs.gnu.org)
20200827151743.27712-2-levenson@mmer.org
* gnu/services/mail.scm (%dovecot-activation): Link the location with multipleplugins (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(-)
Toggle diff (59 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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-pluginsdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 27 Aug 2020 17:17
[PATCH v3 3/9] gnu: dovecot-pigeonhole: Add new variable.
(address . 42899@debbugs.gnu.org)
20200827151743.27712-3-levenson@mmer.org
--- gnu/packages/mail.scm | 50 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+)
Toggle diff (63 lines)diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scmindex 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
A
A
Alexey Abramov wrote on 27 Aug 2020 17:17
[PATCH v3 1/9] gnu: dovecot: Set moduledir to global directory.
(address . 42899@debbugs.gnu.org)(name . Efraim Flashner)(address . efraim@flashner.co.il)
20200827151743.27712-1-levenson@mmer.org
From: Efraim Flashner <efraim@flashner.co.il>
* gnu/packages/mail.scm (dovecot)[arguments]: Add configure-flag to setmoduledir. Adjust custom 'install phase to override moduledir so itsuccessfully installs.--- gnu/packages/mail.scm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
Toggle diff (31 lines)diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scmindex 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
A
A
Alexey Abramov wrote on 27 Aug 2020 17:17
[PATCH v3 7/9] services: dovecot: Add 'imap-metadata?' protocol configuration option.
(address . 42899@debbugs.gnu.org)
20200827151743.27712-7-levenson@mmer.org
* 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(-)
Toggle diff (43 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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 deftypevrdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 27 Aug 2020 17:17
[PATCH v3 6/9] services: dovecot: Add 'mail-attribute-dict' configuration option.
(address . 42899@debbugs.gnu.org)
20200827151743.27712-6-levenson@mmer.org
* 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(+)
Toggle diff (50 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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. Itdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 27 Aug 2020 17:17
[PATCH v3 9/9] services: dovecot: Add 'managesieve-sieve-capability' option.
(address . 42899@debbugs.gnu.org)
20200827151743.27712-9-levenson@mmer.org
* 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(-)
Toggle diff (40 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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 deftypevrdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 27 Aug 2020 17:17
[PATCH v3 8/9] services: dovecot: Add 'managesieve-notify-capability' option.
(address . 42899@debbugs.gnu.org)
20200827151743.27712-8-levenson@mmer.org
* 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(-)
Toggle diff (41 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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 deftypevrdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 27 Aug 2020 17:17
[PATCH v3 5/9] services: dovecot: Only serialize settings with non-empty values.
(address . 42899@debbugs.gnu.org)
20200827151743.27712-5-levenson@mmer.org
* gnu/services/mail.scm (serialize-space-separated-string-list): Protocolsmight have custom settings, which are not supported by other protocols. Toprevent dovecot/services from crashing, serialize settings that hold non-emptyvalues only.--- gnu/services/mail.scm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
Toggle diff (17 lines)diff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 27 Aug 2020 17:17
[PATCH v3 4/9] services: dovecot: Serialize global settings first.
(address . 42899@debbugs.gnu.org)
20200827151743.27712-4-levenson@mmer.org
* gnu/services/mail.scm (dovecot-configuration): To avoid dovecot warningmessages, move serialization of protocol settings below the global one.--- gnu/services/mail.scm | 118 +++++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 59 deletions(-)
Toggle diff (138 lines)diff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 8 Sep 2020 15:51
[PATCH v4 0/8] Dovecot and pigeonhole improvements.
(address . guix-devel@gnu.org)(address . 42899@debbugs.gnu.org)
20200908135106.17731-1-levenson@mmer.org
Hi Guix,
I have been a happy user of dovecot+pigeonhole for a few weeks now. I am adding @guix-devel to give these changes more attention. dovecot-pigeonhole is already merged, Thank you Tobias.
The next step is to provide some common location where dovecot services can find plugins and their settings. I created /etc/dovecot/modules directory, which is actually a link to "/run/current-system/profile/lib/dovecot" and it is creating during the activation time. By doing this we can make sure, that all dovecot services, those which come with dovecot, can find extensions like sieve/managesieve and their extra settings.
I am using mbsync for my email synchronization. And use the following snippet for my IMAPAccount/IMAPStore.
Toggle snippet (9 lines)IMAPAccount current-user Host localhost User aabramov Tunnel /run/current-system/profile/libexec/dovecot/imap
IMAPStore current-user Account current-user
I noticed that when I run imap this way, it reads dovecot configuration, and if some global (dovecot) settings are defined below the service ones, I get a lot of warning message that they won't affect those, and I should move them above in order to make them work. That is why I changed the order of serialization.
I also added some extra settings to the configuration, but those are not for all the services. If you don't apply any values to them, they are still serialized to every service, hence services are crashing with a fatal error. I added a change that will prevent it.
I have rebased my changes and provide v4 series of patches.
Please let me know what you think.
Alexey Abramov (7): services: dovecot: Use modules via symlink to system profile. 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' option. services: dovecot: Add 'managesieve-sieve-capability' option.
Efraim Flashner (1): gnu: dovecot: Set moduledir to global directory.
doc/guix.texi | 53 +++++++++++++- gnu/packages/mail.scm | 9 ++- gnu/services/mail.scm | 165 ++++++++++++++++++++++++++---------------- 3 files changed, 159 insertions(+), 68 deletions(-)
--Alexey
A
A
Alexey Abramov wrote on 8 Sep 2020 15:53
[PATCH v4 2/8] services: dovecot: Use modules via symlink to system profile.
(address . 42899@debbugs.gnu.org)
20200908135348.18551-2-levenson@mmer.org
* gnu/services/mail.scm (%dovecot-activation): Link the location with multipleplugins (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(-)
Toggle diff (59 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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-pluginsdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 8 Sep 2020 15:53
[PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory.
(address . 42899@debbugs.gnu.org)(name . Efraim Flashner)(address . efraim@flashner.co.il)
20200908135348.18551-1-levenson@mmer.org
From: Efraim Flashner <efraim@flashner.co.il>
* gnu/packages/mail.scm (dovecot)[arguments]: Add configure-flag to setmoduledir. Adjust custom 'install phase to override moduledir so itsuccessfully installs.--- gnu/packages/mail.scm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
Toggle diff (31 lines)diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scmindex 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
A
A
Alexey Abramov wrote on 8 Sep 2020 15:53
[PATCH v4 3/8] services: dovecot: Serialize global settings first.
(address . 42899@debbugs.gnu.org)
20200908135348.18551-3-levenson@mmer.org
* gnu/services/mail.scm (dovecot-configuration): To avoid dovecot warningmessages, move serialization of protocol settings below the global one.--- gnu/services/mail.scm | 118 +++++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 59 deletions(-)
Toggle diff (138 lines)diff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 8 Sep 2020 15:53
[PATCH v4 4/8] services: dovecot: Only serialize settings with non-empty values.
(address . 42899@debbugs.gnu.org)
20200908135348.18551-4-levenson@mmer.org
* gnu/services/mail.scm (serialize-space-separated-string-list): Protocolsmight have custom settings, which are not supported by other protocols. Toprevent dovecot/services from crashing, serialize settings that hold non-emptyvalues only.--- gnu/services/mail.scm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
Toggle diff (17 lines)diff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 8 Sep 2020 15:53
[PATCH v4 5/8] services: dovecot: Add 'mail-attribute-dict' configuration option.
(address . 42899@debbugs.gnu.org)
20200908135348.18551-5-levenson@mmer.org
* 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(+)
Toggle diff (50 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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. Itdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 8 Sep 2020 15:53
[PATCH v4 6/8] services: dovecot: Add 'imap-metadata?' protocol configuration option.
(address . 42899@debbugs.gnu.org)
20200908135348.18551-6-levenson@mmer.org
* 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(-)
Toggle diff (43 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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 deftypevrdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 8 Sep 2020 15:53
[PATCH v4 7/8] services: dovecot: Add 'managesieve-notify-capability' option.
(address . 42899@debbugs.gnu.org)
20200908135348.18551-7-levenson@mmer.org
* 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(-)
Toggle diff (41 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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 deftypevrdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 8 Sep 2020 15:53
[PATCH v4 8/8] services: dovecot: Add 'managesieve-sieve-capability' option.
(address . 42899@debbugs.gnu.org)
20200908135348.18551-8-levenson@mmer.org
* 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(-)
Toggle diff (40 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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 deftypevrdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
T
T
Tobias Geerinckx-Rice wrote on 8 Sep 2020 16:03
Re: [bug#42899] [PATCH v4 1/8] gnu: dovecot: Set moduledir to global directory.
(name . Alexey Abramov)(address . levenson@mmer.org)(address . 42899@debbugs.gnu.org)
725b4bfa7b58a13006635df595eace7b@tobias.gr
Alexey,
On 2020-09-08 13:53, Alexey Abramov wrote:
Toggle quote (2 lines)> 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.
A
A
Alexey Abramov wrote on 8 Sep 2020 16:21
(name . Tobias Geerinckx-Rice)(address . me@tobias.gr)(address . 42899@debbugs.gnu.org)
877dt4e4dh.fsf@mmer.org
Hi,
Tobias Geerinckx-Rice <me@tobias.gr> writes:
Toggle quote (10 lines)> 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
A
A
Alexey Abramov wrote on 20 Oct 2020 17:06
[PATCH v5 0/6] Dovecot improvements
(address . 42899@debbugs.gnu.org)
20201020150655.12690-1-levenson@mmer.org
I have updated the series. Dovecot modules are provided via computed set ofmodules, which is available via /usr/lib/dovecot symlink. All other linuxdistribution 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
A
A
Alexey Abramov wrote on 20 Oct 2020 17:06
[PATCH v5 2/6] services: dovecot: Provide plugins through a /gnu/store directory.
(address . 42899@debbugs.gnu.org)
20201020150655.12690-3-levenson@mmer.org
* gnu/services/mail.scm (package-list?, serialize-package-list):* gnu/services/mail.scm (dovecot-configuration)[extensions]: New field. The fieldlets you provide a list of dovecot plugins that need to be available duringthe 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 ofmodules, 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(-)
Toggle diff (126 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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 IPv6diff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 20 Oct 2020 17:06
[PATCH v5 3/6] services: dovecot: Add 'mail-attribute-dict' configuration option.
(address . 42899@debbugs.gnu.org)
20201020150655.12690-4-levenson@mmer.org
* 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(+)
Toggle diff (50 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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. Itdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 20 Oct 2020 17:06
[PATCH v5 4/6] services: dovecot: Add 'imap-metadata?' protocol configuration option.
(address . 42899@debbugs.gnu.org)
20201020150655.12690-5-levenson@mmer.org
* 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(-)
Toggle diff (43 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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 deftypevrdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 20 Oct 2020 17:06
[PATCH v5 1/6] gnu: dovecot: Set moduledir to global directory.
(address . 42899@debbugs.gnu.org)(name . Efraim Flashner)(address . efraim@flashner.co.il)
20201020150655.12690-2-levenson@mmer.org
From: Efraim Flashner <efraim@flashner.co.il>
* gnu/packages/mail.scm (dovecot)[arguments]: Add configure-flag to setmoduledir. Adjust custom 'install phase to override moduledir so itsuccessfully installs.--- gnu/packages/mail.scm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
Toggle diff (31 lines)diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scmindex 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
A
A
Alexey Abramov wrote on 20 Oct 2020 17:06
[PATCH v5 6/6] services: dovecot: Add 'managesieve-sieve-capability' option.
(address . 42899@debbugs.gnu.org)
20201020150655.12690-7-levenson@mmer.org
* 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(-)
Toggle diff (40 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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 deftypevrdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov wrote on 20 Oct 2020 17:06
[PATCH v5 5/6] services: dovecot: Add 'managesieve-notify-capability' option.
(address . 42899@debbugs.gnu.org)
20201020150655.12690-6-levenson@mmer.org
* 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(-)
Toggle diff (41 lines)diff --git a/doc/guix.texi b/doc/guix.texiindex 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 deftypevrdiff --git a/gnu/services/mail.scm b/gnu/services/mail.scmindex 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
A
A
Alexey Abramov via web wrote on 25 Dec 2020 17:15
[PATCH 00/10] Dovecot improvements. Add support for pigeonhole.
(address . 42899@debbugs.gnu.org)
7f1b41919570.19e3284cda596e07@guile.gnu.org
Just a friendly reminder. Please let me know what you think. Or maybe I missed something.
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send email to 42899@debbugs.gnu.org