sieve addflag/setflag for \seen flag doesn't work with keep/implicit keep

Ken Murchison murch at andrew.cmu.edu
Fri Feb 29 16:22:26 EST 2008


I plan on looking into this on Monday.  I need to look at this code 
anyways to make fileinto work across backends.


Rob Mueller wrote:
> The whole mailbox/append code leaves me a bit lost, but I've tracked 
> down the general area of the problem, Ken maybe you can work out what 
> the right fix is, I don't think it's hard.
> 
> sieve_fileinto() does the following:
> 
> 1. cast void * sc -> script_data_t *sd
> 2. pass "sd->username" as the "authuser" param to deliver_mailbox()
> 3. deliver_mailbox() calls append_setup() with "authuser" as the 
> "userid" param
> 4. append_setup() copys the "userid" parameter into the 
> "appendstate.userid" struct area
> 5. during append_commit() "appendstate.userid" is used as the username 
> to add the seen flag to
> 
> That all works fine.
> 
> However, sieve_keep() does the following:
> 
> 1. cast void *mc -> deliver_data_t *mydata
> 2. pass "mydata" as the "mydata" param to deliver_local()
> 3. deliver_local() calls deliver_mailbox(), with "mydata->authuser" as 
> the "userid" param
> 
> The value in mydata->authuser is not the username, in fact they're empty:
> 
> (gdb) p *mydata
> $29 = { ..., authuser = 0x0, authstate = 0x0}
> 
> This means the seen flag never gets stored correctly if you're using 
> keep or the implicit keep, you have to use fileinto.
> 
> I'm not sure of the best way of fixing this. I can see the obvious 
> solution (in sieve_keep, cast void * sc -> script_data_t *sd, and copy 
> authuser and authstate sd to mydata), but that doesn't feel right to me.
> 
> Ken, do you know what the right solution is here?
> 
> Rob
> 
> 


-- 
Kenneth Murchison
Systems Programmer
Project Cyrus Developer/Maintainer
Carnegie Mellon University


More information about the Cyrus-devel mailing list