push-notification plugin and imap-metadata permissions

Giovanni S. Fois giovanni at giovannisfois.net
Fri Apr 22 13:29:17 UTC 2016


[cut]

On 04/22/2016 02:57 PM, Teemu Huovila wrote:
> Why cant I set the following mailbox metadata key?
> /private/vendor/vendor.dovecot/pvt/server/vendor/vendor.dovecot/http-notify
> Why do you want to set it there? Have you tried setting it on some mailbox path?

Do you mean by editing directly the metadata file instead of accessing it with an Imap command?
The answer to this question is that I don't have the direct access to the physical mailboxes.

>> Let me explain the context:
>>
>> I'm using the Dovecot version 2.23.1, but the same happens for the 2.2.22
>>
>> The push-notification plugin is supposed to send out a notification whenever
>> a mailbox get a new email message.
>>
>> In order to tell if a mailbox is enabled to send out the notification, the plugin
>> looks out for the following mailbox metadata key:
>> /private/vendor/vendor.dovecot/pvt/server/vendor/vendor.dovecot/http-notify
>>
>> If the key is set then everything is OK and the notification is sent, otherwise the
>> action is skipped.
>>
>> If I try to setup the metadata key by hand (telnet as the user over the imap port):
>> setmetadata INBOX (/private/vendor/vendor.dovecot/pvt/server/vendor/vendor.dovecot/http-notify "user=myuser at mydomain.com")
>>
>> I get the error message: "Internal mailbox attributes cannot be accessed"
>>
>> Digging in the Dovecot 2.2.22 sources i found that:
>>
>> This string is from lib-imap-storage/imap-metadata.c - line 36 - Dovecot 2.2.22
>> The message is triggered by the following condition - same file - line 125  - Dovecot 2.2.22
>>
>> if (strncmp(*key_r, MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT,
>>                      strlen(MAILBOX_ATTRIBUTE_PREFIX_DOVECOT_PVT)) == 0) {
>>
>> So the path pvt/server appears to be forbidden.
>>
>> But, in the file lib-storage/mailbox-attribute.h we can read the following comment:
>>
>> /* User can get/set all non-pvt/ attributes and also pvt/server/
>>     (but not pvt/server/pvt/) attributes. */
>>
>> And, after said comment there is the definition of the macro MAILBOX_ATTRIBUTE_KEY_IS_USER_ACCESSIBLE(key)
>> which has the same basic function of the condition in imap-metadata.c , but in this case
>> the same imap key is seen as accessible.
>>
>> Now my questions:
>>
>> Can we use a negated version of MAILBOX_ATTRIBUTE_KEY_IS_USER_ACCESSIBLE(key) in imap-metadata?
>> How can the push-notification plugin work out-of-the-box without changes and recompilation?
>>
>> Thank you for your valuable time and forgive me if I'm posing a dumb question.
> Please see instructions at http://oxpedia.org/wiki/index.php?title=AppSuite:OX_Mail#Setup_of_the_Dovecot_Push
> In case the problem is not resolved, do attach your doveconf -n output to the next mail.

I have read the instructions, and enabled the metadata options and enabled the lmtp and lda parts as 
stated in the instructions.
I understand that the instructions talk about the Dovecot "http-notify" plugin, which I suppose is 
the old name of the push_notification plugin.
I understand that the Ox Appsuite Mail uses the following imap key 
"/private/vendor/vendor.dovecot/http-notify" instead of the one declared by
the plugin.

I'm not using the OX Appsuite Mail, I just need to get out the notifications out of the plugin 
towards some url of mine which will take care of the message.
In order to get there I need to write said metadata key in the INBOX folders metadata .

I know I could write my own plugin or I could recompile the push_notification plugin after changing 
the key.
The problem with this is that my sysadmin wants to install and keep everything updated using only 
original packages.

Attached to this email you will find the output of the dovecot -n command.

I'll be grateful for any hint and suggestion.

Thank you for your time and patience.

Giovanni










-------------- next part --------------
# 2.2.23.1 (b1f5a4f): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.13 (93c6eee)
# OS: Linux 3.2.0-4-amd64 x86_64 Debian 7.10 
auth_debug = yes
auth_default_realm = mydomain.it
auth_master_user_separator = *
auth_mechanisms = cram-md5 digest-md5 plain
auth_realms = mydomain.it
auth_username_format = %Ln at mydomain.it
auth_verbose = yes
base_dir = /var/run/dovecot/
disable_plaintext_auth = no
dotlock_use_excl = no
imap_capability = IMAP4rev1 UIDPLUS NAMESPACE QUOTA CHILDREN SORT ID
imap_client_workarounds = delay-newmail tb-extra-mailbox-sep tb-lsub-flags
imap_id_log = *
listen = *
mail_attribute_dict = file:%h/Maildir/dovecot-attributes
mail_debug = yes
mail_fsync = always
mail_gid = 9999
mail_location = sdbox:~/dbox:ALT=/mbx_alt/%5.2h_t2/%12.6h%u
mail_plugins = quota stats notify
mail_uid = 9999
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 vacation-seconds editheader
mmap_disable = yes
namespace inbox {
  inbox = yes
  location = 
  mailbox Draft {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox Spam {
    auto = subscribe
    special_use = \Junk
  }
  mailbox Trashcan {
    auto = subscribe
    special_use = \Trash
  }
  prefix = 
  separator = /
}
passdb {
  args = /etc/dovecot/master-users
  driver = passwd-file
  master = yes
  pass = yes
}
passdb {
  args = nopassword=y
  driver = static
}
plugin {
  push_notification_driver = ox:url=http://mydomain.it/push_notify.php
  quota = dict:User quota::redis:host=10.39.117.15:port=6400
  quota_grace = 10M
  quota_rule = *:storage=10G
  quota_rule2 = Trash:storage=+100M
  quota_warning = storage=95%% quota-warning 95 %u
  quota_warning2 = storage=80%% quota-warning 80 %u
  sieve = file:~/sieve;active=~/.dovecot.sieve
  sieve_before = file:~/sieve/sender_blacklist.sieve
  sieve_before2 = file:~/sieve/interceptor.sieve
  sieve_before3 = file:~/sieve/forward_vacation.sieve
  sieve_extensions = +vacation +vacation-seconds +editheader
  sieve_vacation_default_period = 1h
  sieve_vacation_max_period = 30d
  sieve_vacation_min_period = 60s
  stats_refresh = 30 secs
  stats_track_cmds = yes
}
protocols = imap pop3 lmtp sieve
service imap-login {
  inet_listener imap {
    address = 10.39.117.15
    port = 143
  }
  service_count = 0
}
service imap-postlogin {
  executable = script-login -d /etc/dovecot/postlogin.sh imap
  user = $default_internal_user
}
service imap {
  executable = imap imap-postlogin
}
service lmtp {
  inet_listener lmtp {
    address = 10.39.117.15
    port = 24
  }
}
service managesieve-login {
  inet_listener sieve {
    port = 4190
  }
  service_count = 1
  vsz_limit = 64 M
}
service pop-postlogin {
  executable = script-login -d /etc/dovecot/postlogin.sh pop3
  user = $default_internal_user
}
service pop3-login {
  inet_listener pop3 {
    address = 10.39.117.15
    port = 110
  }
}
service pop3 {
  executable = pop3 pop-postlogin
}
service stats {
  fifo_listener stats-mail {
    mode = 0600
    user = doveuser
  }
}
ssl = no
stats_memory_limit = 64 M
submission_host = director-1.mydomain.it
userdb {
  args = /etc/dovecot/conf.d/dovecot-dict-auth.conf.ext
  driver = dict
}
protocol lmtp {
  mail_plugins = quota stats notify sieve  notify push_notification
}
protocol lda {
  mail_plugins = quota stats notify notify push_notification
}
protocol imap {
  imap_metadata = yes
  mail_plugins = quota stats notify imap_quota imap_stats
}
protocol sieve {
  mail_max_userip_connections = 100
}


More information about the dovecot mailing list