Discussion:
Problem with dovecot-managesieved and sieve scripts in mysql
ing. Petr Bitzan
2014-10-03 17:34:03 UTC
Permalink
Hello,

I would like to ask for advice on the following things:



I have sieve scripts stored in mysql, work for LDA and imapd correctly.

When I try to connect using the client managesieve (Roungcube plugin managesieve with Thunderbird addon sieve), i receive the following error:



Oct 3 19:04:50 mail dovecot: managesieve(11044167): Debug: sieve: include: sieve_global_dir is not set; it is currently not possible to include `:global' scripts.

Oct 3 19:04:50 mail dovecot: managesieve(11044167): Error: sieve-storage: Cannot open non-file script location for active script `dict:proxy::sieve;name=active;bindir=/var/vmail/sieve-scripts/11044167'

Oct 3 19:04:50 mail dovecot: managesieve(11044167): Fatal: Failed to open Sieve storage.



If i change settings sieve to:



sieve = ~/.dovecot.sieve

sieve_dir = ~/sieve



it works fine.



can someone please advise configuring dovecot-managesieved with saving scripts in the database.



Thank you very much



Petr Bitzan





-------------

# 2.1.7: /etc/dovecot/dovecot.conf

# OS: Linux 3.2.0-4-amd64 x86_64 Debian 7.6 ext4

auth_debug = yes

auth_mechanisms = plain login

auth_verbose = yes

dict {

acl = mysql:/etc/dovecot/dovecot-acl-shared-dict.conf.ext

sieve = mysql:/etc/dovecot/dict-sieve-sql.conf.ext

}

first_valid_gid = 1002

first_valid_uid = 1002

last_valid_gid = 1002

last_valid_uid = 1002

mail_debug = yes

mail_location = maildir:/var/vmail/%n/Maildir

mail_plugins = " mail_log notify acl"

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 ihave

namespace {

list = children

location = maildir:%%h/Maildir:INDEX=~/shared/%%u/

prefix = shared/%%u/

separator = /

subscriptions = yes

type = shared

}

namespace inbox {

hidden = no

inbox = yes

list = yes

location =

mailbox Drafts {

special_use = \Drafts

}

mailbox HAM {

auto = subscribe

}

mailbox Junk {

special_use = \Junk

}

mailbox SPAM {

auto = subscribe

}

mailbox Sent {

special_use = \Sent

}

mailbox "Sent Messages" {

special_use = \Sent

}

mailbox Trash {

special_use = \Trash

}

prefix =

separator = /

subscriptions = yes

type = private

}

passdb {

args = /etc/dovecot/dovecot-sql.conf.ext

driver = sql

}

plugin {

acl = vfile

acl_shared_dict = proxy::acl

quota = maildir:User quota

quota_warning = storage=95%% quota-warning 95 %u

sieve = dict:proxy::sieve;name=active;bindir=/var/vmail/sieve-scripts/%u

sieve_dir = dict:proxy::sieve;name=active;bindir=~/.sieve-bin

}

protocols = " imap lmtp sieve pop3"

service auth {

unix_listener /var/spool/postfix/private/auth {

group = postfix

mode = 0660

user = postfix

}

}

service dict {

unix_listener dict {

group = vmail

mode = 0600

user = vmail

}

}

service lmtp {

inet_listener lmtp {

address = 127.0.0.1

port = 24

}

user = vmail

}

service managesieve-login {

inet_listener sieve {

address = xxxxxxx

port = 4190

}

}

service quota-warning {

executable = script /usr/local/bin/quota-warning.sh

unix_listener quota-warning {

user = vmail

}

user = dovecot

}

ssl_cert = </etc/ssl/certs/smtp.lf3.cuni.cz.pem

ssl_key = </etc/ssl/private/serverkeynopass.pem

userdb {

args = /etc/dovecot/dovecot-sql.conf.ext

driver = sql

}

protocol lmtp {

mail_plugins = " mail_log notify acl quota sieve"

}

protocol lda {

mail_plugins = " mail_log notify acl quota sieve acl"

}

protocol imap {

mail_plugins = " mail_log notify acl quota imap_quota acl imap_acl"

}

protocol pop3 {

mail_plugins = " mail_log notify acl quota"

}



dict-sieve-sql.conf.ext:



connect = host=xxxxxxxxxxxxx dbname=xxxxxxxx user=xxxxxxxx password=xxxxxxxxxxxxxx

map {

pattern = priv/sieve/name/$script_name

table = user_sieve_scripts

username_field = username

value_field = id

fields {

script_name = $script_name

}

}

map {

pattern = priv/sieve/data/$id

table = user_sieve_scripts

username_field = username

value_field = script_data

fields {

id = $id

}

}



CREATE TABLE IF NOT EXISTS `user_sieve_scripts` (

`id` int(11) NOT NULL DEFAULT '0',

`username` varchar(40) DEFAULT NULL,

`script_name` varchar(255) DEFAULT NULL,

`script_data` varchar(10240) DEFAULT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `username` (`username`,`script_name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Stephan Bosch
2014-10-03 21:09:59 UTC
Permalink
Post by ing. Petr Bitzan
Hello,
I have sieve scripts stored in mysql, work for LDA and imapd correctly.
Oct 3 19:04:50 mail dovecot: managesieve(11044167): Debug: sieve: include: sieve_global_dir is not set; it is currently not possible to include `:global' scripts.
Oct 3 19:04:50 mail dovecot: managesieve(11044167): Error: sieve-storage: Cannot open non-file script location for active script `dict:proxy::sieve;name=active;bindir=/var/vmail/sieve-scripts/11044167'
Oct 3 19:04:50 mail dovecot: managesieve(11044167): Fatal: Failed to open Sieve storage.
Currently, ManageSieve only supports the file storage. The dict storage
can only be used to retrieve scripts, not store them. Latest Pigeonhole
hg revision provides the infrastructure to implement this, but that will
probably not happen soon.

Regards,

Stephan.
ing. Petr Bitzan
2014-10-03 21:29:16 UTC
Permalink
Thank you very much for your reply.

I have to store sieve scripts still think.

With best regards
Petr Bitzan

-----Original Message-----
From: dovecot [mailto:dovecot-bounces at dovecot.org] On Behalf Of Stephan Bosch
Sent: Friday, October 03, 2014 11:10 PM
To: ing. Petr Bitzan; dovecot at dovecot.org
Subject: Re: Problem with dovecot-managesieved and sieve scripts in mysql
Post by ing. Petr Bitzan
Hello,
I have sieve scripts stored in mysql, work for LDA and imapd correctly.
Oct 3 19:04:50 mail dovecot: managesieve(11044167): Debug: sieve: include: sieve_global_dir is not set; it is currently not possible to include `:global' scripts.
Oct 3 19:04:50 mail dovecot: managesieve(11044167): Error: sieve-storage: Cannot open non-file script location for active script `dict:proxy::sieve;name=active;bindir=/var/vmail/sieve-scripts/11044167'
Oct 3 19:04:50 mail dovecot: managesieve(11044167): Fatal: Failed to open Sieve storage.
Currently, ManageSieve only supports the file storage. The dict storage can only be used to retrieve scripts, not store them. Latest Pigeonhole hg revision provides the infrastructure to implement this, but that will probably not happen soon.

Regards,

Stephan.

Loading...