push-notification plugin and imap-metadata permissions
Ultra short version:
Why cant I set the following mailbox metadata key? /private/vendor/vendor.dovecot/pvt/server/vendor/vendor.dovecot/http-notify
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@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.
Best wishes, Giovanni S. Fois
On 22.04.2016 15:17, Giovanni S. Fois wrote:
Ultra short version:
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?
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@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_Doveco... In case the problem is not resolved, do attach your doveconf -n output to the next mail.
br, Teemu
Best wishes, Giovanni S. Fois
[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@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_Doveco... 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
On 22 Apr 2016, at 15:17, Giovanni S. Fois <giovanni@giovannisfois.net> wrote:
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@mydomain.com")
I get the error message: "Internal mailbox attributes cannot be accessed"
Server metadata is set with:
a SETMETADATA "" (/private/vendor/vendor.dovecot/http-notify "user=myuser@mydomain.com")
Which should internally map into the INBOX's /private/vendor/vendor.dovecot/pvt/server/vendor/vendor.dovecot/http-notify.
On 2016-04-22 09:07 PM, Timo Sirainen wrote:
On 22 Apr 2016, at 15:17, Giovanni S. Fois <giovanni@giovannisfois.net> wrote:
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@mydomain.com")
I get the error message: "Internal mailbox attributes cannot be accessed" Server metadata is set with:
a SETMETADATA "" (/private/vendor/vendor.dovecot/http-notify "user=myuser@mydomain.com")
Which should internally map into the INBOX's /private/vendor/vendor.dovecot/pvt/server/vendor/vendor.dovecot/http-notify.
I am sorry, but this is not working. As you suggested I have launched the imap commands:
a setmetadata "" (/private/vendor/vendor.dovecot/http-notify "user=myuser@mydomain.com") b getmetadata "" "/private/vendor/vendor.dovecot/http-notify" c getmetadata "INBOX" "/private/vendor/vendor.dovecot/pvt/server/vendor/vendor.dovecot/http-notify"
the 'b' command returns a sort of json with the correct result the 'c' command returns NIL
By the way, hardcoding the key as "/private/vendor/vendor.dovecot/http-notify" and recompiling the plugin has the effect to bring the system on the expected course.
Thank you again for your time and kind support.
Have a good weekend, Giovanni
On 23.04.2016 10:01, giovanni@giovannisfois.net wrote:
On 2016-04-22 09:07 PM, Timo Sirainen wrote:
On 22 Apr 2016, at 15:17, Giovanni S. Fois <giovanni@giovannisfois.net> wrote:
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@mydomain.com")
I get the error message: "Internal mailbox attributes cannot be accessed" Server metadata is set with:
a SETMETADATA "" (/private/vendor/vendor.dovecot/http-notify "user=myuser@mydomain.com")
Which should internally map into the INBOX's /private/vendor/vendor.dovecot/pvt/server/vendor/vendor.dovecot/http-notify.
I am sorry, but this is not working. As you suggested I have launched the imap commands:
a setmetadata "" (/private/vendor/vendor.dovecot/http-notify "user=myuser@mydomain.com") b getmetadata "" "/private/vendor/vendor.dovecot/http-notify" c getmetadata "INBOX" "/private/vendor/vendor.dovecot/pvt/server/vendor/vendor.dovecot/http-notify"
the 'b' command returns a sort of json with the correct result the 'c' command returns NIL
After command "a", I think you should have gotten the push notification. The getmetadata imap command is not supposed to be able to access the path with /pvr/server/ in it. It is used for internal mapping only. Since command "b" returned the data, I would say the metadata is correctly set.
br, Teemu Huovila
By the way, hardcoding the key as "/private/vendor/vendor.dovecot/http-notify" and recompiling the plugin has the effect to bring the system on the expected course.
Thank you again for your time and kind support.
Have a good weekend, Giovanni
On 04/25/2016 10:51 AM, Teemu Huovila wrote:
On 23.04.2016 10:01, giovanni@giovannisfois.net wrote:
On 2016-04-22 09:07 PM, Timo Sirainen wrote:
On 22 Apr 2016, at 15:17, Giovanni S. Fois <giovanni@giovannisfois.net> wrote:
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@mydomain.com")
I get the error message: "Internal mailbox attributes cannot be accessed" Server metadata is set with:
a SETMETADATA "" (/private/vendor/vendor.dovecot/http-notify "user=myuser@mydomain.com")
Which should internally map into the INBOX's /private/vendor/vendor.dovecot/pvt/server/vendor/vendor.dovecot/http-notify.
I am sorry, but this is not working. As you suggested I have launched the imap commands:
a setmetadata "" (/private/vendor/vendor.dovecot/http-notify "user=myuser@mydomain.com") b getmetadata "" "/private/vendor/vendor.dovecot/http-notify" c getmetadata "INBOX" "/private/vendor/vendor.dovecot/pvt/server/vendor/vendor.dovecot/http-notify"
the 'b' command returns a sort of json with the correct result the 'c' command returns NIL
After command "a", I think you should have gotten the push notification. The getmetadata imap command is not supposed to be able to access the path with /pvr/server/ in it. It is used for internal mapping only. Since command "b" returned the data, I would say the metadata is correctly set.
br, Teemu Huovila
I was wrong. Trying to get it up and working I had polluted the mailbox metadata with spurious keys and values. After a full removal of the metadata keys everything is working as described by you. Thank you for your attention and support
Greetings, Giovanni S. Fois
participants (4)
-
Giovanni S. Fois
-
giovanni@giovannisfois.net
-
Teemu Huovila
-
Timo Sirainen