push-notification plugin and imap-metadata permissions

Giovanni S. Fois giovanni at giovannisfois.net
Fri Apr 22 12:17:30 UTC 2016

Ultra short version:

Why cant I set the following mailbox metadata key?

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:

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

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

Best wishes,
Giovanni S. Fois

More information about the dovecot mailing list