--- Begin Message ---
Hi everyone,

after switching to ubuntu (from debian) and running a newer dovecot --version 2.2.33.2 (d6601f4ec) i encountered a problem with configuring sieve. The mailserver has virtual maila accounts stored in /decrypted/%d/%n

Prior, i used

plugin {
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/sieve
  sieve_before = /etc/dovecot/sieve/before.d
}

after the upgrade, I moved the sieve_before location on disk and changed this to

plugin {
  sieve = file:~/sieve;active=~/.dovecot.sieve
  sieve_before = /var/lib/dovecot/sieve/before.d
}

only to see that sieve didnt forward e-mails anymore. Looking at the logs below, i suspect, that I didnt understood the meaning of sieve = file:~/sieve;active=~/.dovecot.sieve correctly:


Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: Module loaded: /usr/lib/dovecot/modules/lib90_sieve_plugin.so Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: sieve: Pigeonhole version 0.4.21 (92477967) initializing Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: sieve: include: sieve_global is not set; it is currently not possible to include `:global' scripts. Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: gPtsCPUBBFwMFQAA9mr2oQ: sieve: file storage: Using active Sieve script path: /decrypted/industra.space/events/.dovecot.sieve Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: gPtsCPUBBFwMFQAA9mr2oQ: sieve: file storage: Using script storage path: /decrypted/industra.space/events/sieve Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: gPtsCPUBBFwMFQAA9mr2oQ: sieve: file storage: Relative path to sieve storage in active link: sieve/ Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: gPtsCPUBBFwMFQAA9mr2oQ: sieve: file storage: Using Sieve script path: /decrypted/industra.space/events/.dovecot.sieve Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: gPtsCPUBBFwMFQAA9mr2oQ: sieve: file storage: Storage path `/decrypted/industra.space/events/.dovecot.sieve' not found Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: gPtsCPUBBFwMFQAA9mr2oQ: sieve: User has no active script in storage `/decrypted/industra.space/events/sieve' Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: gPtsCPUBBFwMFQAA9mr2oQ: sieve: User has no personal script Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: gPtsCPUBBFwMFQAA9mr2oQ: sieve: file storage: Using script storage path: /var/lib/dovecot/sieve/before.d Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: gPtsCPUBBFwMFQAA9mr2oQ: sieve: file script: Opened script `move-spam' from `/var/lib/dovecot/sieve/before.d/move-spam.sieve' Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: gPtsCPUBBFwMFQAA9mr2oQ: sieve: Executed before user's personal Sieve script(1): /var/lib/dovecot/sieve/before.d/move-spam.sieve Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: gPtsCPUBBFwMFQAA9mr2oQ: sieve: Opening script 1 of 1 from `/var/lib/dovecot/sieve/before.d/move-spam.sieve' Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: gPtsCPUBBFwMFQAA9mr2oQ: sieve: Loading script /var/lib/dovecot/sieve/before.d/move-spam.sieve Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: gPtsCPUBBFwMFQAA9mr2oQ: sieve: Script binary /var/lib/dovecot/sieve/before.d/move-spam.svbin successfully loaded Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: gPtsCPUBBFwMFQAA9mr2oQ: sieve: binary save: not saving binary /var/lib/dovecot/sieve/before.d/move-spam.svbin, because it is already stored Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): Debug: gPtsCPUBBFwMFQAA9mr2oQ: sieve: Executing script from `/var/lib/dovecot/sieve/before.d/move-spam.svbin' Dec  2 16:01:57 vao01 dovecot: lmtp(events@industra.space): gPtsCPUBBFwMFQAA9mr2oQ: sieve: msgid=<faae5de1-10b7-9ad3-30d8-f0b91cca9...@fenix.cz>: stored mail into mailbox 'INBOX'

After changing this to

sieve = file:/decrypted/%d/%n/sieve;active=/decrypted/%d/%n/.dovecot.sieve

I got working sieve rules that forward mails correctly again, but at the same time I loose the ability to let users edit their sieve scripts via the roundcube managesieve plugin (roundcube reported an unknown error), but dovecot complained that the active file wasnt a symlink. I tried several combinations of configuring this, but I seem to miss some important point. Would you kindly help me get this right? Configs are attached.

Thanks in advance, Pavel


root@vao01:/var/www/roundcube/plugins/managesieve# cat config.inc.php 
<?php

// managesieve server port. When empty the port will be determined automatically
// using getservbyname() function, with 4190 as a fallback.
$config['managesieve_port'] = null;

// managesieve server address, default is localhost.
// Replacement variables supported in host name:
// %h - user's IMAP hostname
// %n - http hostname ($_SERVER['SERVER_NAME'])
// %d - domain (http hostname without the first part)
// For example %n = mail.domain.tld, %d = domain.tld
$config['managesieve_host'] = 'localhost';

// authentication method. Can be CRAM-MD5, DIGEST-MD5, PLAIN, LOGIN, EXTERNAL
// or none. Optional, defaults to best method supported by server.
$config['managesieve_auth_type'] = null;

// Optional managesieve authentication identifier to be used as authorization 
proxy.
// Authenticate as a different user but act on behalf of the logged in user.
// Works with PLAIN and DIGEST-MD5 auth.
$config['managesieve_auth_cid'] = null;

// Optional managesieve authentication password to be used for imap_auth_cid
$config['managesieve_auth_pw'] = null;

// use or not TLS for managesieve server connection
// Note: tls:// prefix in managesieve_host is also supported
$config['managesieve_usetls'] = false;

// Connection scket context options
// See http://php.net/manual/en/context.ssl.php
// The example below enables server certificate validation
//$config['managesieve_conn_options'] = array(
//  'ssl'         => array(
//     'verify_peer'  => true,
//     'verify_depth' => 3,
//     'cafile'       => '/etc/openssl/certs/ca.crt',
//   ),
// );
$config['managesieve_conn_options'] = null;

// default contents of filters script (eg. default spam filter)
$config['managesieve_default'] = '/var/www/roundcube/config/global.sieve';

// The name of the script which will be used when there's no user script
$config['managesieve_script_name'] = 'managesieve';

// Sieve RFC says that we should use UTF-8 endcoding for mailbox names,
// but some implementations does not covert UTF-8 to modified UTF-7.
// Defaults to UTF7-IMAP
$config['managesieve_mbox_encoding'] = 'UTF-8';

// I need this because my dovecot (with listescape plugin) uses
// ':' delimiter, but creates folders with dot delimiter
$config['managesieve_replace_delimiter'] = '';

// disabled sieve extensions (body, copy, date, editheader, encoded-character,
// envelope, environment, ereject, fileinto, ihave, imap4flags, index,
// mailbox, mboxmetadata, regex, reject, relational, servermetadata,
// spamtest, spamtestplus, subaddress, vacation, variables, virustest, etc.
// Note: not all extensions are implemented
$config['managesieve_disabled_extensions'] = array();

// Enables debugging of conversation with sieve server. Logs it into 
<log_dir>/sieve
$config['managesieve_debug'] = false;

// Enables features described in http://wiki.kolab.org/KEP:14
$config['managesieve_kolab_master'] = false;

// Script name extension used for scripts including. Dovecot uses '.sieve',
// Cyrus uses '.siv'. Doesn't matter if you have managesieve_kolab_master 
disabled.
$config['managesieve_filename_extension'] = '.sieve';

// List of reserved script names (without extension).
// Scripts listed here will be not presented to the user.
$config['managesieve_filename_exceptions'] = array();

// List of domains limiting destination emails in redirect action
// If not empty, user will need to select domain from a list
$config['managesieve_domains'] = array();

// Enables separate management interface for vacation responses (out-of-office)
// 0 - no separate section (default),
// 1 - add Vacation section,
// 2 - add Vacation section, but hide Filters section
$config['managesieve_vacation'] = 0;

// Default vacation interval (in days).
// Note: If server supports vacation-seconds extension it is possible
// to define interval in seconds here (as a string), e.g. "3600s".
$config['managesieve_vacation_interval'] = 0;

// Some servers require vacation :addresses to be filled with all
// user addresses (aliases). This option enables automatic filling
// of these on initial vacation form creation.
$config['managesieve_vacation_addresses_init'] = false;

// Supported methods of notify extension. Default: 'mailto'
$config['managesieve_notify_methods'] = array('mailto');

root@vao01:/etc/dovecot/conf.d# dovecot -n
# 2.2.33.2 (d6601f4ec): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.21 (92477967)
# OS: Linux 4.19.2 x86_64 Ubuntu 18.04.1 LTS zfs
auth_mechanisms = plain login
default_internal_user = vmail
first_valid_uid = 0
hostname = mail.senbonzakura.net
mail_debug = yes
mail_location = maildir:/decrypted/%d/%n
mail_privileged_group = vmail
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character 
vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy 
include variables body enotify environment mailbox date index ihave duplicate 
mime foreverypart extracttext
namespace inbox {
  inbox = yes
  location = 
  mailbox Archive {
    auto = subscribe
    special_use = \Archive
  }
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Junk {
    auto = subscribe
    special_use = \Junk
  }
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox Trash {
    auto = subscribe
    special_use = \Trash
  }
  prefix = 
}
passdb {
  args = /etc/dovecot/dovecot-sql.conf.ext
  driver = sql
}
plugin {
  antispam_backend = pipe
  antispam_mail_notspam = learn_ham
  antispam_mail_sendmail = /usr/bin/rspamc
  antispam_mail_sendmail_args = -h;localhost:11334
  antispam_mail_spam = learn_spam
  antispam_spam = Junk
  antispam_trash = Trash
  fts = solr
  fts_solr = break-imap-search url=http://localhost:8080/solr/
  sieve = file:/decrypted/%d/%n/sieve;active=/decrypted/%d/%n/.dovecot.sieve
  sieve_before = /var/lib/dovecot/sieve/before.d
}
postmaster_address = postmas...@senbonzakura.net
protocols = imap lmtp sieve pop3
service auth-worker {
  unix_listener auth-worker {
    user = vmail
  }
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0666
    user = postfix
  }
  unix_listener auth-userdb {
    group = vmail
    mode = 0660
    user = vmail
  }
  user = vmail
}
service imap-login {
  inet_listener imap {
    port = 0
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0666
    user = postfix
  }
  user = vmail
}
service pop3-login {
  inet_listener pop3 {
    port = 0
  }
}
ssl = required
ssl_cert = </etc/letsencrypt/live/senbonzakura.net/fullchain.pem
ssl_cipher_list = 
ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
ssl_client_ca_dir = /etc/ssl/certs
ssl_dh_parameters_length = 4096
ssl_key =  # hidden, use -P to show it
ssl_prefer_server_ciphers = yes
ssl_protocols = !SSLv3 !TLSv1 !TLSv1.1 TLSv1.2
userdb {
  args = uid=vmail gid=vmail home=/decrypted/%d/%n
  driver = static
}
protocol lmtp {
  mail_plugins = " sieve sieve"
  postmaster_address = postmas...@senbonzakura.net
}
protocol lda {
  mail_plugins = " sieve"
}
protocol imap {
  mail_plugins = " antispam fts fts_solr"
}


--- End Message ---

Reply via email to