Re: Problem with included global sieve script when mailbox contains a dot

2012-11-25 Thread Thomas Cataldo
Can anyone comment on that ?

We might be doing something wrong while settings our ACLs, but looking with
wireshark at how cyradm I think we're fine and that there's really a bug in
here.

Thomas,
Blue Mind.



On Mon, Nov 19, 2012 at 8:39 PM, Thomas Cataldo tcata...@gmail.com wrote:

 Hi,

 I did some more research on my problem and tracked the problem down to
 this test in append.c (cyrus 2.4) :

 else if (!strcmp(flag[i], \\flagged)) {
 if (as-myrights  ACL_WRITE) {  // this test fails when
 mailbox is a.b@domain
 message_index.system_flags |= FLAG_FLAGGED;
 }
 }

 My problem is probably related to unixhierarchysep settings and the way
 ACLs are set, but the following patch fixes it :

 diff --git a/imap/append.c b/imap/append.c
 index d3c2bd4..b622dd1 100644
 --- a/imap/append.c
 +++ b/imap/append.c
 @@ -160,12 +160,25 @@ int append_setup(struct appendstate *as, const char
 *name,
  {
  int r;
  struct quota q;
 +unsigned int pos;
 +size_t at_char;
 +char* fixed_acls;

  as-mailbox = NULL;
  r = mailbox_open_iwl(name, as-mailbox);
  if (r) return r;

 -as-myrights = cyrus_acl_myrights(auth_state, as-mailbox-acl);
 +fixed_acls = strdup(as-mailbox-acl);
 +syslog(LOG_ERR, before acls tweaks: %s\n, fixed_acls);
 +at_char = strcspn(fixed_acls, @);
 +for (pos=0; pos  at_char; pos++) {
 +  if (fixed_acls[pos] == '.') {
 +   fixed_acls[pos] = '^';
 +  }
 +}
 +syslog(LOG_ERR, after acls tweaks: %s\n, fixed_acls);
 +
 +as-myrights = cyrus_acl_myrights(auth_state, fixed_acls);

  if ((as-myrights  aclcheck) != aclcheck) {
 r = (as-myrights  ACL_LOOKUP) ?


 The two logs I added give the following output :

 Nov 19 20:37:00 ppday cyrus/lmtp[42207]: before acls tweaks: a...@buffy.vmw
 #011lrswipkxtecda#011admin0#011lrswipkxtecda#011ad...@buffy.vmw
 #011lrsp#011
 Nov 19 20:37:00 ppday cyrus/lmtp[42207]: after acls tweaks: a^b...@buffy.vmw
 #011lrswipkxtecda#011admin0#011lrswipkxtecda#011ad...@buffy.vmw
 #011lrsp#011

 I hope this test patch might help figure out what is wrong. My acls
 setup or a bug.

 Regards,
 Thomas Cataldo,
 Blue Mind.







 On Wed, Nov 14, 2012 at 10:40 AM, Thomas Cataldo tcata...@gmail.comwrote:

 Hello,

 Consider the following sieve setup :

 root@ppday:/var/spool/sieve# cat global/buffy.vmw.sieve.script
 require [body, copy, fileinto, imapflags ];

 # filters
 if allof ( address :contains from admin) {
 setflag \\Flagged;
 }

 # END

 root@ppday:/var/spool/sieve# cat
 domain/b/buffy.vmw/a/a^b/bm-user5.sieve.script
 require [body, copy, fileinto, imapflags, vacation, include ];

 include :global buffy.vmw.sieve;

 # END


 root@ppday:/var/spool/sieve# cat
 domain/b/buffy.vmw/s/sp/bm-user6.sieve.script
 require [body, copy, fileinto, imapflags, vacation, include ];

 include :global buffy.vmw.sieve;


 # END

 When ad...@buffy.vmw sends an email to a...@buffy.vmw and s...@buffy.vmw,
 the following happens :
  - the mail is correctly flagged for sp
  - no flagging for a.b

 Nothing interesting in my logs when the mail is delivered :


 Nov 14 10:17:20 ppday cyrus/master[19560]: about to exec
 /usr/lib/cyrus/bin/lmtpd
 Nov 14 10:17:20 ppday cyrus/lmtp[19560]: executed
 Nov 14 10:17:20 ppday cyrus/lmtp[19560]: skiplist: checkpointed
 /var/lib/cyrus/statuscache.db (0 records, 144 bytes) in 0 seconds
 Nov 14 10:17:21 ppday cyrus/lmtp[19560]: accepted connection
 Nov 14 10:17:21 ppday cyrus/lmtp[19560]: connection from ppday.buffy.vmw
 [172.16.78.128] preauth'd as postman
 Nov 14 10:17:21 ppday cyrus/lmtp[19560]: Delivered:
 1c42d02ef8953cb95219dafba...@buffy.vmw to mailbox:
 buffy.vmw!user.a^b
 Nov 14 10:17:21 ppday cyrus/lmtp[19560]: USAGE a^b user: 0.004000 sys:
 0.008000
 Nov 14 10:17:21 ppday cyrus/lmtp[19560]: Delivered:
 1c42d02ef8953cb95219dafba...@buffy.vmw to mailbox:
 buffy.vmw!user.admin
 Nov 14 10:17:21 ppday cyrus/lmtp[19560]: USAGE admin user: 0.00 sys:
 0.004000
 Nov 14 10:17:21 ppday cyrus/lmtp[19560]: Delivered:
 1c42d02ef8953cb95219dafba...@buffy.vmw to mailbox:
 buffy.vmw!user.sp
 Nov 14 10:17:21 ppday cyrus/lmtp[19560]: USAGE sp user: 0.00 sys:
 0.00
 Nov 14 10:17:21 ppday postfix/lmtp[19551]: 5DA0A21E37: to=a...@buffy.vmw,
 relay=172.16.78.128[172.16.78.128]:2400, delay=0.93,
 delays=0.07/0.03/0.03/0.79, dsn=2.1.5, status=sent (250 2.1.5 Delivery OK)
 Nov 14 10:17:21 ppday postfix/lmtp[19551]: 5DA0A21E37: to=ad...@buffy.vmw,
 relay=172.16.78.128[172.16.78.128]:2400, delay=0.93,
 delays=0.07/0.03/0.03/0.79, dsn=2.1.5, status=sent (250 2.1.5 Delivery OK)
 Nov 14 10:17:21 ppday postfix/lmtp[19551]: 5DA0A21E37: to=s...@buffy.vmw,
 relay=172.16.78.128[172.16.78.128]:2400, delay=0.93,
 delays=0.07/0.03/0.03/0.79, dsn=2.1.5, status=sent (250 2.1.5 Delivery OK)
 Nov 14 10:17:21 ppday postfix/qmgr[20160]: 5DA0A21E37: removed

 Any know bugs with global sieve vs mailboxes with dot in them ?
 Can I enable more verbose 

Re: Problem with included global sieve script when mailbox contains a dot

2012-11-25 Thread Bron Gondwana
Sorry I haven't commented.  Yes, I think you're right - it's a bug.  I
tried to fix something like it a while back and created more and worse
bugs, so I reverted the change.

The way that usernames and folder details are handled in sieve is a
right mess... conversions backwards and forwards between internal and
external namespaces.

It's on the to look at before 2.5 list.  I'm travelling at the
moment, so I'm not spending as much time on Cyrus as I'd like :(  I'd
love anyone else who has time to take a look too... see if they can
untangle the conversions!

Bron.

On Sun, Nov 25, 2012, at 11:31 AM, Thomas Cataldo wrote:

  Can anyone comment on that ?



We might be doing something wrong while settings our ACLs, but looking
with wireshark at how cyradm I think we're fine and that there's really
a bug in here.



Thomas,

Blue Mind.



On Mon, Nov 19, 2012 at 8:39 PM, Thomas Cataldo [1]tcata...@gmail.com
wrote:

  Hi,



I did some more research on my problem and tracked the problem down to
this test in append.c (cyrus 2.4) :



else if (!strcmp(flag[i], \\flagged)) {
if (as-myrights  ACL_WRITE) {  // this test fails when
mailbox is a.b@domain
message_index.system_flags |= FLAG_FLAGGED;
}
}



My problem is probably related to unixhierarchysep settings and the way
ACLs are set, but the following patch fixes it :



diff --git a/imap/append.c b/imap/append.c
index d3c2bd4..b622dd1 100644
--- a/imap/append.c
+++ b/imap/append.c
@@ -160,12 +160,25 @@ int append_setup(struct appendstate *as, const
char *name,
 {
 int r;
 struct quota q;
+unsigned int pos;
+size_t at_char;
+char* fixed_acls;

 as-mailbox = NULL;
 r = mailbox_open_iwl(name, as-mailbox);
 if (r) return r;

-as-myrights = cyrus_acl_myrights(auth_state, as-mailbox-acl);
+fixed_acls = strdup(as-mailbox-acl);
+syslog(LOG_ERR, before acls tweaks: %s\n, fixed_acls);
+at_char = strcspn(fixed_acls, @);
+for (pos=0; pos  at_char; pos++) {
+  if (fixed_acls[pos] == '.') {
+   fixed_acls[pos] = '^';
+  }
+}
+syslog(LOG_ERR, after acls tweaks: %s\n, fixed_acls);
+
+as-myrights = cyrus_acl_myrights(auth_state, fixed_acls);

 if ((as-myrights  aclcheck) != aclcheck) {
r = (as-myrights  ACL_LOOKUP) ?





The two logs I added give the following output :



Nov 19 20:37:00 ppday cyrus/lmtp[42207]: before acls tweaks:
a...@buffy.vmw#011lrswipkxtecda#011admin0#011lrswipkxtecda#011admin@buff
y.vmw#011lrsp#011
Nov 19 20:37:00 ppday cyrus/lmtp[42207]: after acls tweaks:
a^b...@buffy.vmw#011lrswipkxtecda#011admin0#011lrswipkxtecda#011admin@buff
y.vmw#011lrsp#011



I hope this test patch might help figure out what is wrong. My acls
setup or a bug.



Regards,

Thomas Cataldo,

Blue Mind.






On Wed, Nov 14, 2012 at 10:40 AM, Thomas Cataldo
[2]tcata...@gmail.com wrote:

  Hello,



Consider the following sieve setup :



root@ppday:/var/spool/sieve# cat global/buffy.vmw.sieve.script
require [body, copy, fileinto, imapflags ];

# filters
if allof ( address :contains from admin) {
setflag \\Flagged;
}

# END

root@ppday:/var/spool/sieve# cat
domain/b/buffy.vmw/a/a^b/bm-user5.sieve.script
require [body, copy, fileinto, imapflags, vacation, include
];

include :global buffy.vmw.sieve;

# END


root@ppday:/var/spool/sieve# cat
domain/b/buffy.vmw/s/sp/bm-user6.sieve.script
require [body, copy, fileinto, imapflags, vacation, include
];

include :global buffy.vmw.sieve;


# END



When ad...@buffy.vmw sends an email to a...@buffy.vmw and s...@buffy.vmw,
the following happens :

 - the mail is correctly flagged for sp

 - no flagging for a.b



Nothing interesting in my logs when the mail is delivered :





Nov 14 10:17:20 ppday cyrus/master[19560]: about to exec
/usr/lib/cyrus/bin/lmtpd
Nov 14 10:17:20 ppday cyrus/lmtp[19560]: executed
Nov 14 10:17:20 ppday cyrus/lmtp[19560]: skiplist: checkpointed
/var/lib/cyrus/statuscache.db (0 records, 144 bytes) in 0 seconds
Nov 14 10:17:21 ppday cyrus/lmtp[19560]: accepted connection
Nov 14 10:17:21 ppday cyrus/lmtp[19560]: connection from
ppday.buffy.vmw [172.16.78.128] preauth'd as postman
Nov 14 10:17:21 ppday cyrus/lmtp[19560]: Delivered:
1c42d02ef8953cb95219dafba...@buffy.vmw to mailbox:
buffy.vmw!user.a^b
Nov 14 10:17:21 ppday cyrus/lmtp[19560]: USAGE a^b user: 0.004000 sys:
0.008000
Nov 14 10:17:21 ppday cyrus/lmtp[19560]: Delivered:
1c42d02ef8953cb95219dafba...@buffy.vmw to mailbox:
buffy.vmw!user.admin
Nov 14 10:17:21 ppday cyrus/lmtp[19560]: USAGE admin user: 0.00
sys: 0.004000
Nov 14 10:17:21 ppday cyrus/lmtp[19560]: Delivered:
1c42d02ef8953cb95219dafba...@buffy.vmw to mailbox:
buffy.vmw!user.sp
Nov 14 10:17:21 ppday cyrus/lmtp[19560]: USAGE sp user: 0.00 sys:
0.00
Nov 14 10:17:21 ppday postfix/lmtp[19551]: 5DA0A21E37:
to=a...@buffy.vmw, relay=172.16.78.128[172.16.78.128]:2400,
delay=0.93, delays=0.07/0.03/0.03/0.79, dsn=2.1.5, status=sent (250
2.1.5 Delivery